11

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

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

4

3 回答 3

3

我还没有完全弄清楚问题是什么,但我确实将它隔离到一个发生这种情况的小型复制器中:

<#@ 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 这一事实有关。

显然,这还不是一个“答案”,但它是调查的开始:)

于 2011-07-26T18:41:01.997 回答
2

改变:

<#@ 程序集名称="EnvDTE" #>

至:

<#@ 程序集名称="EnvDTE,版本=8.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a" #>

在 T4MVC.tt 中,它将删除编译器警告:)

大卫 - 我将很快向 MvcContrib 提交带有修复程序的拉取请求 - 在我这样做之前让我知道你对该解决方案感到满意 :)

于 2011-07-27T07:27:46.230 回答
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>

于 2013-07-11T15:48:17.450 回答