1

私のプロジェクトでは、Resharperをインストールしており、VisualStudio内から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'.

<#@ import namespace = "NUnit.Framework"#>でインポートする場合、FTest.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   
4

1 に答える 1

2

@import は、参照ではなく「using」ステートメントを提供するだけなので、ここでは重要ではありません。

LoadFrom コンテキストに読み込まれるタイプ A は、T4 のアセンブリ タグによって読み込まれるものです。Resharper ディレクトリからのタイプ B は、このエラーから、「BaseTest」を含むアセンブリへの反射から来ているように見えます。

BaseTest のビルドを調べて、Resharper がここに忍び込んだかどうかを確認してみます。basetest のアセンブリに対して Reflector または ildasm を実行することで、この理論を検証できる可能性があります。

于 2012-05-14T18:37:23.203 に答える