T4MVC“运行自定义工具”生成EnvDTO 7.0 vs 8.0 csc警告

时间:2011-07-26 00:37:28

标签: asp.net-mvc asp.net-mvc-3 t4mvc envdte

当我右键单击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

真的没什么大不了的,我只是不喜欢在我的代码库中有(不必要的)警告...

3 个答案:

答案 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;

要:

  

&lt;#@ assembly name =“EnvDTE,Version = 8.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”#&gt;

在T4MVC.tt中

它将删除编译器警告:)

大卫 - 我将很快向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>