2017-01-18 214 views
0

我有一個C#項目(例如Project.exe),它依賴於a.dll,而a.dll依賴於b.dll。C#:構建項目時依賴項的複製依賴項

當我構建Project.exe時,a.dll被構建並複製到Project.exe的輸出文件夾 - 但b.dll不會被複制到輸出文件夾中。

當Project.exe被構建時,如何將a.dll和b.dll複製到Project.exe的輸出文件夾中?

編輯:我認爲重要的是要指出,我想保持Project.exe和b.dll相互解耦。這首先要有一個.dll文件。

+1

執行後構建事件的一種方法:右鍵單擊項目>屬性>構建>構建後,您將不得不編寫一個用於複製dll的批處理命令。 – Husain

+0

這應該只是開箱即用,它是如何引用程序集解析工作。因此我不能重現這一點。如果a.dll將b.dll作爲參考,並且foo.exe將a.dll作爲參考,並且設置了CopyLocal(對於b.dll和a.dll),則b.dll和a.dll都將是複製到foo.exe的目錄。所以你必須提供更多信息。 – stijn

+0

你解決了這個問題,如果問題依然存在,請隨時告訴我。 –

回答

1

您是否嘗試檢查b.dll的複製本地屬性?

  1. 在Visual Studio中,單擊解決方案資源管理器選項卡。
  2. 在參考文獻下找到b.dll。
  3. 右鍵單擊並選擇屬性。
  4. 確保複製本地設置爲True。

看看是否解決了這個問題。

+0

如果沒有,請將b.dll作爲project.exe的參考添加並執行相同的操作。 – Will

+0

是的,「複製本地」設置爲「真」,但這沒有幫助。我知道我可以將b.dll添加爲Project.exe的引用,但我想避免這種情況並保持這些項目的解耦。 – user884248

+0

侯賽因對你的問題的評論可能是當時最好的方法。您可以使用內置變量(如OutDir)作爲生成後事件複製到bin目錄。 – ozemmy

0

您可以使用msbuild copy命令來實現它。請右鍵單擊項目節點 - >卸載項目 - >右鍵單擊項目 - >編輯project.csproj,將下面的代碼添加到csproj文件中。

<Target Name="AfterBuild"> 
    <Copy SourceFiles="$(MSBuildProjectDirectory)\..\b\$(OutputPath)b.dll" DestinationFolder="$(OutputPath)" ContinueOnError="true"/> 
    </Target> 

以下是供您參考的示例。 https://1drv.ms/u/s!AlvaNEnglADDgQP6j0wRMk5A1DCU

+0

使用AfterBuild的問題是,如果其他人也想使用它,它將被覆蓋並且根本不被執行。更好地使用AfterTargets = 「生成」。 – stijn