从Visual Studio中的T4生成器的路径中删除程序集

时间:2012-05-09 13:10:31

标签: visual-studio-2010 t4

在我的项目中,我安装了Resharper,并且我正在使用Visual Studio中的T4模板进行设计时间。

我有

<#@ assembly name="$(SolutionDIr)FTest\bin\Debug\FTest.dll" #>
<#@ assembly name="$(SolutionDIr)FTest\bin\Debug\nunit.framework.dll" #>

我也有

<#@ import namespace="NUnit.Framework" #>

然后我在这个代码中有一个演员

    <#
    var someVar = (TestAttribute)typeof(BaseTest).GetMethods()
    .Where(
    x => x.GetCustomAttributes(false).Where(y => y.Name == "CategoryAttribute" && ((CategoryAttribute)y).Name == "Smoke").Any()
     )
    #>

我得到了无效的强制转换异常。它告诉我模板生成器使用与项目dll不同的'nunit.framework'dll。

Error   21  Running transformation: System.InvalidCastException: [A]NUnit.Framework.CategoryAttribute cannot be cast to [B]NUnit.Framework.CategoryAttribute. Type A originates from 'nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77' in the context 'LoadFrom' at location 'C:\Users\Chandirasekar Thiaga\AppData\Local\assembly\dl3\ZGE1068O.OD1\ARWGXOXD.EMZ\7407d57d\ff3a4298_6ceccc01\nunit.framework.dll'. Type B originates from 'nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77' in the context 'Default' at location 'C:\Program Files (x86)\JetBrains\ReSharper\v6.1\Bin\nunit.framework.dll'.

使用&lt;#@ import namespace =“NUnit.Framework”#&gt;导入时如何?导入与FTest.dll使用的dll相同的dll?我不想使用Resharper的nunit版本!

编辑:

在设置了GarethJ之后的注册表项后,消息如下所示:

Error   12  Running transformation: System.InvalidCastException: [A]NUnit.Framework.CategoryAttribute cannot be cast to [B]NUnit.Framework.CategoryAttribute. Type A originates from 'nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77' in the context 'LoadFrom' at location 'C:\Repos\BSF-Functional-Automation\FunctionalTest\FunctionalTest\bin\Debug\nunit.framework.dll'. Type B originates from 'nunit.framework, Version=2.5.10.11092, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77' in the context 'Default' at location 'C:\Program Files (x86)\JetBrains\ReSharper\v6.1\Bin\nunit.framework.dll'.
   at Microsoft.VisualStudio.TextTemplating64EAA000670725A96AF52252D093BE63.GeneratedTextTransformation.<TransformText>b__5(Object x)
   at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
   at Microsoft.VisualStudio.TextTemplating64EAA000670725A96AF52252D093BE63.GeneratedTextTransformation.<TransformText>b__4(MethodInfo m)
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Microsoft.VisualStudio.TextTemplating64EAA000670725A96AF52252D093BE63.GeneratedTextTransformation.TransformText()
   at Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession session, String source, ITextTemplatingEngineHost host, String& result)        1   1   

1 个答案:

答案 0 :(得分:2)

@import只贡献一个'使用'语句而不是引用,所以这里没有结果。

在LoadFrom上下文中加载的类型A是由T4中的程序集标记加载的类型。 来自Resharper目录的类型B出现在此错误中,来自对包含“BaseTest”的程序集的反射。

我会尝试查看BaseTest的构建,看看Resharper是否可以在这里悄悄进入。你可以通过在basetest的程序集上运行反射器或ildasm来验证这个理论。