6

C# プロジェクトをビルドするときに実行したいカスタム タスクがあります。このタスクは、別のアセンブリ MyCommon.DLL を参照する MyTask.dll にあります。

問題は、MyCommon.dll が MyTask.dll に対して "..\Common\MyCommon.dll" にあり、MSBuild プロセスの AppBase ディレクトリの外に置かれていることです。MSBuild のログを分析し、バインドの失敗に関する Fusion のレポートを見て、これが実際に問題であることを確認しました。

ビルド プロセス中に Fusion に MyCommon.dll を検出させるにはどうすればよいですか? アセンブリを移動すると、それに依存するアプリが壊れることに注意してください。

更新: まあ、結局はコピーを使用するようです。他のソリューションはすべてシステム全体の変更を必要としますが、これはここでは保証されません。

4

4 に答える 4

2

代わりにそれをコピーしますか?ちょっとした考え。完了したら削除するビルドをサポートするためだけに、そこにコピーを用意してください。

于 2009-03-27T16:23:59.073 に答える
1

複数のソリューションが表示されます:

1st : GAC にアセンブリを追加します (アセンブリには厳密な名前が必要です)

gacutil /I <assembly name> 

2 番目:コードベースまたはプローブを使用して、machine.configファイルまたは でアセンブリを見つけますmsbuild.exe.config

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyCommon"
                              publicKeyToken="32ab4ba45e0a69a1"
                              culture="neutral" />
            <codeBase version="2.0.0.0"
                      href="file://C:/yourpath/MyCommon.DLL"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

3番目: David Mが言ったように、前に同じディレクトリにアセンブリをコピーし、後で削除します。

于 2009-03-27T16:52:13.700 に答える
0

オプションは、ILMergeを使用して依存関係をタスク アセンブリにマージすることです。

于 2012-09-11T05:47:23.907 に答える
0

これらの「ソリューション」はすべて、環境を複雑にする依存関係をさらに作成します。実行時にプローブ パスを更新する簡単な方法があるはずです。

具体的には、MSBuild では、.proj ファイルにプローブ パスを追加したり、依存する dll を指定したりできる必要があります。

カスタム UsingTask を定義できます。

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />

しかし、依存関係を追加することはできませんか? それは含まれるべきです...ここに次のようなものがあります

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll">
<DependantAssembly AssemblyFile="dependant.dll"/>
</UsingTask>

しかし、いいえ、これはサポートされていません...

于 2009-07-20T20:54:45.813 に答える