2014-03-26 70 views
0

我在我的項目中使用了各種第三方程序集(native,nuget包),有時針對不同平臺(x86/amd64)進行了優化。 Visual Studio會自動將它們複製到應用程序根目錄(通常是bin \ Debug \ PLATFORM)中,這會創建一個完全未構造的混亂。將第三方程序集複製到子文件夾

現在我正在尋找一種方法來自動將第三方dll複製到自定義子目錄中。我知道從應用程序根目錄(app.config或代碼中的privatePath)不同的位置加載程序集的各種方法,但不知道如何自動將它們複製到那裏。

所需的結構

bin\ 
    release\ 
     x64\ 
      MyApp.exe 
      MyApp.exe.config 
      cfg\ 
       custom.config 
      lib\ 
       ninject\ 
        Ninject.dll 
        Ninject.Extensions 
        Ninject.Extensions.Logging 
       SomeNativeDll\ 
        native_x64.dll 
       OtherStuff.dll 
     x86\ 
      ... 

我已經找到了發帖的方式生成事件,但在宣佈與一些批處理一樣的腳本語言每個引用是PITA!

回答

3

一個可能的解決方案是添加一個額外的項目與你的結構。下面的步驟重新創建:

  1. 添加DLL項目:placeholder.csproj
  2. 創建文件夾 'LIB'
  3. 創建子文件夾 'ninject'
  4. 文件 'Ninject.dll' 添加到該文件夾
    1. 設置BuildAction的以「內容」
  5. 添加placholder.csproj作爲參考,yourt主體工程
  6. 構建

內容文件(但真正被你的DLL)在您的主項目的輸出文件夾相同的文件夾結構正在複製。

爲了支持平臺specfic dll的它變得有點棘手。

卸載該項目,並找到你的本地文件:

<Content Include="test\Some_X86.dll" > 
<CopyToOutputDirectory>Always</CopyToOutputDirectory> 
</Content> 

,並添加一個條件,它

<Content Include="test\Some_X86.dll" Condition="'$(Platform)' == 'x86'" > 
    <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
</Content> 

如果你只是想有文件輸出的目標86。

相關問題