web-dev-qa-db-ja.com

Fodyエラーのため、プロジェクトをコンパイルできません。 Fody(またはその他のコード)の変更はありません

**これはVisualStudio2013の問題です。

私が得ているエラーは大規模でほとんど役に立たないですが、その核心は

Error   130 Fody: Could not load 'ModuleWeaver' from 'PropertyChanged.Fody, Version=1.50.3.0, Culture=neutral, PublicKeyToken=null' due to ReflectionTypeLoadException.
It is possible you need to update the package.
exception.LoaderExceptions:
System.IO.FileLoadException: Could not load file or Assembly 'Mono.Cecil,     Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its     dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756'

繰り返しになりますが、変更がないので、一般的に何が問題なのかわかりません。探しているDLLは、いつも座っていたのと同じ場所に座っています。

編集:どうやらこの時点でそれはそのエラーを吐き出すのにうんざりしていたので、新しいものを作りました

Error   42  The "Fody.WeavingTask" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or Assembly 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756' or one of its dependencies. The system cannot find the file specified.
File name: 'Mono.Cecil, Version=0.9.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756'
   at ExceptionExtensions.LogException(ILogger logger, Exception exception)
   at Processor.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\Processor.cs:line 56
   at Fody.WeavingTask.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\Fody\WeavingTask.cs:line 44
   at     Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()

編集2:

また、エラーは50行目の「Fody.targets」内で発生しているとされています。

<Fody.WeavingTask
      AssemblyPath="@(IntermediateAssembly)"
      IntermediateDir="$(IntermediateDir)"
      KeyFilePath="$(FodyKeyFilePath)"
      ProjectDirectory="$(ProjectDir)"
      SolutionDir="$(FodySolutionDir)"
      References="@(ReferencePath)"
      SignAssembly="$(FodySignAssembly)"
      ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
      DefineConstants="$(DefineConstants)"
  />

編集3:

Fodyに関連付けられているすべてのファイルを削除し、ビルドプロセス中にNugetがそれらを再ダウンロードしました。その後のエラーは2番目のエラーと同じです。

"Error   42  The "Fody.WeavingTask" task failed unexpectedly." 

編集4:

本当にこれが修正されるまで私たちは絶対に停止しているので、Fodyの開発者がこれを見ることを願っています。現在の構成ISが機能していたとき)であるため、機能していたときの状態に「戻す」ことはできません。

11
Justin

あなたのエラーは実際にはModuleWeaverと呼ばれるクラスを見つけることにあるように思われるでしょう。このクラスはFodyパッケージの一部です。

nugetパッケージマネージャーのパッケージを次のように更新するだけです。

   update-package Fody -reinstall

おそらくそれを修正します。

それが失敗した場合:app.configファイルに誤ったリダイレクトがないことを確認してください。このセクションを削除し、すべてのリダイレクトを削除します。 Visual Studioは通常、必要なものを追加し直します。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>

もう一度やり直してください。失敗した場合は、どの依存アセンブリが失敗しているかを見つけてください。 1行のコマンドラインアプリを作成するか、LinqPadを使用できます。

LinqPad を試すことができます。まだ使用していない場合は、これを貼り付けてください。

Assembly.LoadFile("path to Fody");
Assembly.LoadFile("path to Mono.Cecil");

不足しているライブラリの詳細を示す例外が発生するはずです。

15
Jim

Gitを使用している場合は、コマンドラインからこれを実行します。

git clean -xdf
3
Paul Kiar

インターネットで見つけたすべての解決策を試した後、次のことがうまくいきました。

  1. VisualStudioを閉じます。
  2. PCLプロジェクトと{platform}プロジェクトのDebugフォルダーとReleaseフォルダーを削除します。私にとって、これらは_MyPCLProjectName\bin\_や_iOS\bin\iPhoneSimulator\_のような場所にありました。
  3. PCLと{platform} _.csproj_ファイルを編集し、すべての_<Import>_タグを削除します。except<Import Project="$(MSBuildExtensionsPath32)\...で始まるタグを除きます。
  4. VisualStudioを再度開きます。
  5. パッケージを復元します(この手順は、Visual Studioを再度開いたときに自動的に実行される場合があります)-_Solution Explorer > right-click solution > Restore NuGet Packages_。
2
jbyrd

同様のエラーが発生する場合は、この情報の恩恵を受ける可能性があります。この情報では、異なるFodyバージョンのプロジェクトは同じNuGetパッケージフォルダーを使用できません(正しく理解している場合) ): PropertyChangedの複数のバージョンをインストールするとコンパイルが中断されます

すべてのプロジェクトにFodyパッケージを再インストールしても問題は解決しますが、すべてを同じバージョンに変更する方が簡単な場合があります。

1
wezzix

このような問題をデバッグするには、 SysInternals Process Monitor を使用できます。

一般的なアプローチは次のとおりです。

  1. プロセスモニターを実行する
  2. フィルタを適用して、アプリケーションのみを監視します
  3. 問題を再現する
  4. 不足しているDLLを探します。この部分は少し注意が必要です。

    1. a DLLが何度も見つからない可能性があります( "パスが見つかりません")
    2. しかし、ついに発見されました(「成功」)
    3. それはあなたが探しているDLLではなく、そのDLLの依存関係であるかもしれません

    したがって、neverが見つからなかったDLLを見つける必要があります。また、見つからなかったDLLは必要ありません。しかし、その後の試行で見つかりました。

ええと、そのプロセスはかなり時間がかかる可能性があるので、私はツールを開発しました プロセスモニターログアナライザー 。これを使用すると、より短い時間で犯人を見つけることができるはずです。

  1. プロセスモニターを実行する
  2. フィルタを適用して、アプリケーションのみを監視します
  3. 問題を再現する
  4. 結果をXMLとして保存します(「パスが見つかりません」および「成功」のすべての項目を保持します)
  5. logAnalyzerでXMLを開きます
  6. 上から下に、DLLの存在を確認します。このツールは、見つからないDLLのみを表示します。

免責事項:テキストから明らかにならない場合、私はその無料ツールの作成者です。

1
Thomas Weller