当我右键单击T4MVC.tt并选择“运行自定义工具”(即通过T4MVC.cs文件重建)时,我收到以下警告。
警告1 编译转换:假设程序集引用'EnvDTE,Version = 7.0.3300.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a' 匹配'EnvDTE,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a', 您可能需要提供运行时策略 C:\ Development \ EHealth-Trunk \ src \ EHealth.Web \ T4MVC.tt 1 1
真的没什么大不了的,我只是不喜欢在我的代码库中有(不必要的)警告...
答案 0 :(得分:3)
我还没有弄清楚问题是什么,但我确实把它隔离到了一个小的repro:
<#@ template language="C#" #>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="VSLangProj" #>
<#+
void Test(EnvDTE.Project Project) {
var vsProject = (VSLangProj.VSProject)Project.Object;
var refs = vsProject.References;
}
#>
在处理过程中会收到以下警告:
Compiling transformation: Assuming assembly reference 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' matches 'EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a', you may need to supply runtime policy
我的GAC中唯一的EnvDTE是8.0.0.0。似乎这个问题与VSLangProj 7.0.3300.0(我唯一拥有的)有一个对EnvDTE 7.0.3300.0的引用有关,而这个引用并不存在。
显然,这还不是'答案',但这是调查的开始:)
答案 1 :(得分:2)
变化:
&lt;#@ assembly name =“EnvDTE”#&gt;
要:
在T4MVC.tt中&lt;#@ assembly name =“EnvDTE,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”#&gt;
它将删除编译器警告:)
大卫 - 我将很快向MvcContrib提交修复请求 - 请在我做之前让我知道您对该解决方案感到满意:)
答案 2 :(得分:1)
添加app.config并粘贴以下代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50318">
<dependentAssembly>
<assemblyIdentity name="EnvDTE" publicKeyToken=
"b03f5f7f11d50a3a"/>
<bindingRedirect oldVersion="7.0.3300.0"
newVersion="8.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>