有没有办法在剃刀(MVC3)视图中执行
extern alias
?
我有同一程序集的两个版本(即 1.0 和 2.0),其类型具有相同的名称和命名空间,我需要一种方法在 razor 视图中指定较新的版本。
我已经尝试过:
@extern
和:
@{ extern alias MyAlias; }
但是这些都不起作用。
十多年过去了,但我确实找到了解决办法。 Razor 中仍然没有“true”
extern alias
,但 C# 10 确实引入了 global using
,它与命名空间别名一起可以用作解决方法。
从技术上讲,该语句可以放在任何地方,但应用程序的入口点是放置它的最自然的地方。因此,在
Program.cs
或 App.cs
或同等内容中,在文件顶部放置
extern alias MyAlias;
global using __MyAlias = MyAlias::My.Alias;
现在,所有 C# 文件(包括 Razor 自动生成的文件)都可以使用
__MyAlias
代替 MyAlias::My.Alias
。请注意,这实际上并没有使原始程序集别名 MyAlias::
成为全局的;如果有多个顶级命名空间,则必须对每个命名空间执行此操作。但它将解决在 Razor 中使用具有冲突命名空间名称的程序集的原始问题。
在项目“Views”目录下的“web.config”文件中。找到此部分。
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
.
.
<!-- etc -->
</namespaces>
</pages>
</system.web.webPages.razor>
您可以像这样添加自定义命名空间:
<add namespace="My.Custom" />
这会将命名空间添加到所有 Razor(.cshtml 或 .vbhtml)文件中。