【问题标题】:T4MVC "run custom tool" generates EnvDTO 7.0 vs 8.0 csc warningT4MVC“运行自定义工具”生成 EnvDTO 7.0 vs 8.0 csc 警告
【发布时间】:2011-07-26 00:37:27
【问题描述】:

当我右键单击 T4MVC.tt 并选择“运行自定义工具”(即通过 T4MVC.cs 文件重建)时,我收到以下警告。

警告 1 编译转换:假设程序集参考 'EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 匹配“EnvDTE,版本=8.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”, 您可能需要提供运行时策略 C:\Development\EHealth-Trunk\src\EHealth.Web\T4MVC.tt 1 1

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

【问题讨论】:

  • 是的,这已经困扰了一段时间了,我一直不确定到底是什么原因造成的。也许是时候深入研究一下了!

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


【解决方案1】:

我还没有完全弄清楚问题出在哪里,但我确实将它隔离到发生这种情况的小型复制品中:

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

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

【讨论】:

  • 我认为对我们有帮助的部分是“您可能需要提供运行时策略”,此处(过于简短地)介绍了这一点:msdn.microsoft.com/en-us/library/wc57zasf%28v=VS.90%29.aspx - 他们说了一些关于通过在应用程序 .config 文件'...
  • 模板运行没有错误的事实表明正确的策略已经到位。问题是编译器不知道这一点。另一种方法可能是使用编译指示来尝试删除警告,但我无法做到这一点。 :(
【解决方案2】:

变化:

收件人:

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

David - 我将很快向 MvcContrib 提交包含修复程序的拉取请求 - 请在我这样做之前告诉我您对该解决方案感到满意 :)

【讨论】:

  • 暂时忽略这个答案......我不确定它是否真的有效(抱歉)。
  • 对不起,我刚刚注意到这一点。让我知道如果你有什么工作!
  • 我不确定这是否有用...它似乎会显示警告,直到您编辑 T4MVC.tt 文件并点击保存(我认为这会触发 tt 编译器)然后警告消失了……
  • 是的,它可能不起作用。这是一个相当棘手的问题,我无法让 MS 的任何人找到解决方法:(
【解决方案3】:

添加 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多