6

Moles 0.94.51023.0 を使用して VS 2010 SP1 で System.ServiceModel v4 をモール化しようとしていますが、次 のエラーが引き続き発生します。 ' (アセンブリ参照がありませんか?) [my-test-project.Test\obj\Debug\Moles\ssm\mgcsproj] my-test-project.Test\mgcs 293022 43

このインターフェイスは、オブジェクト ブラウザーで検索すると System.ServiceModel.dll v2.0.5.0 (Silverlight) でしか見つからないため、.NET 4.0 の System.ServiceModel.dll から削除されたようです。

これは、moles.exe を使用して cmdline で再現できます。moles ファイルを変更して、指定した型名のみを生成しようとしましたが、違いはないようです。これは、VS2010 SP1 にアップグレードする前は問題なく機能していたので、バグだと思われますが、助けていただければ幸いです。

ありがとうニック

4

4 に答える 4

4

なぜそうなったのかはわかりませんが、同じ問題があり、Moles 型フィルターを使用して解決し、本当に必要なものだけを含めました (コンパイルがかなり高速化されるという素晴らしい副作用があります! !)。これは.moles私が使用しているサンプルファイルです:

<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
  <Assembly Name="System.ServiceModel"/>
  <StubGeneration>
    <Types>
      <Clear/>
      <Add Namespace="System.ServiceModel.Description!"/>
    </Types>
  </StubGeneration>
</Moles>
于 2011-05-14T17:36:35.847 に答える
1

Moles がコンパイルに使用していた System アセンブリと System.ServiceModel アセンブリの間で競合が発生したようです。

最近、Microsoft .NET Framework 4.5 をインストールしました。

これをアンインストールして4.0を再インストールすると、すべてが機能しました。

于 2013-04-01T17:34:08.997 に答える
0

レガシ コードを使用していて、たまたま Microsoft Moles を使用することに追い込まれた場合に備えて、私はこのトピックについて徹底的に掘り下げました。

Moles ディレクトリ (C:\Program Files.. 内) に移動し、コマンド ライン ユーティリティ (moles.exe) を管理者として実行することを意味する、受け入れられた回答の提案を使用してみました。多くのオプションがあり、そのうちの 1 つを使用すると、参照されたアセンブリを含めることができます (上記で提案したように)。

ただし、アセンブリを参照せずにユーティリティを実行しようとしても、ユーティリティは最終的に、定義済みの参照アセンブリ パスを使用して C# コンパイラ (csc.exe) を呼び出します。ここで、.NET Framework のバージョン間の混乱が発生すると結論付けています。これらのアセンブリ パスを含めないようにすることはできませんでした。

私の具体的なシナリオは、カスタム アセンブリをほくろしようとしていたというものでしたが、明らかに、このマシンに .NET 4.5 がインストールされていたため、コンパイル時に System.Collections.Generics IReadOnlyCollection、IReadOnlyDictionary について不平を言っていました。

解決策: 私が解決した唯一の解決策は、Mole フィルターを使用することでした。これについては、他の投稿や Microsoft Moles Web サイト (メイン ページに .NET 4.5 トラブルシューティングへの特別なリンクがあります) を参照してください。Visual Studio では、ソリューション エクスプローラーで右クリックして、参照するカスタム アセンブリの単体テスト プロジェクトに Moles アセンブリを追加するだけです。次にビルドしてみました。受け取ったエラーごとに、問題のあるクラスを記録し、moles ファイルに以下を追加して、それらをシムまたはスタブから除外しました。

<Moles xmlns="http://schemas.microsoft.com/moles/2010/">
  <Assembly Name = "MyCustomAssembly" />
  <StubGeneration>
    <Types>
      <Remove TypeName="ClassThatUsesIReadOnlyCollectionEtc" />
    </Types>
  </StubGeneration>
  <MoleGeneration>
    <Types>
      <Remove TypeName="ClassThatUsesIReadOnlyCollectionEtc" />
    </Types>
  </MoleGeneration>
</Moles>

モル/スタブ生成から除外しているクラスが必要な場合は明らかにうまくいきませんが、問題のあるクラスは重要ではなく、スタブやシムを行う必要がないため、私の場合はうまくいきました。それらのクラス。

于 2016-01-06T16:30:59.850 に答える