2015-02-07 54 views
0

我在VS 2013中創建了一個ASP.NET MVC 4網站。我依賴的庫程序集之一包裝了原生dll。我將該本地DLL複製到項目的生成後事件中的項目輸出目錄中。這使我可以在IIS Express下運行該網站,並且工作正常。但是,當我去發佈站點時,原生DLL會留在泥土中。理想情況下,我希望發佈Win32或x64原生dll,具體取決於Visual Studio中當前選擇的平臺。任何人都知道如何讓本機DLL被髮布命令舀起來?如何獲取ASP.NET MVC發佈到本地二進制拷貝到bin目錄

順便說一句我已經嘗試過將DLL添加到項目中並將生成操作設置爲無並將「複製到輸出目錄」設置爲始終複製的技巧。雖然這有效,但它只適用於本地dll的一個特定位。這並不理想。

回答

1

你可以通過手工編輯.csproj(或.vbproj)文件來添加條件。

  1. 保存項目中的任何工作。
  2. 右鍵單擊solution explorer中的項目節點,然後單擊Unload Project
  3. 整個項目將摺疊成一個節點。右鍵單擊該節點並選擇Edit <Project Name>.csproj(或.vbproj)。

向下滾動並查找您用於的DLL。它應該看起來像這樣:

<ItemGroup> 
    <Content Include="bin\Release\x86\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

複製它並添加一個條件。在這種情況下,您想要基於平臺進行更改。這是一種方法。請注意,您應該分析項目文件以確定爲特定配置添加的最佳條件。您還應該更改目錄以匹配您的32位和64位DLL文件的(相對)位置。

<ItemGroup Condition=" '$(PlatformTarget)' == 'x86' "> 
    <Content Include="bin\$(Configuration)\x86\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
<ItemGroup Condition=" '$(PlatformTarget)' == 'x64' "> 
    <Content Include="bin\$(Configuration)\x64\My.dll"> 
     <CopyToOutputDirectory>Always</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 

Visual Studio中沒有正確顯示這(它會顯示一個破碎的DLL鏈接和有效的DLL鏈接),但是放心這個方法的功能。這也有助於理解Visual Studio項目文件不過是一個MSBuild配置文件。因此,儘管Visual Studio不支持添加或顯示條件或其他MSBuild選項的方法,但如果根據MSBuild文檔進行配置,它們都將正常運行。

+0

謝謝!這很好地處理平臺特定的dll。我確實收到警告,我用' false'消除了。 – 2015-02-07 21:35:09

+0

謝謝,我不知道''元素。我想還有一個[''元素](http://stackoverflow.com/questions/2961753/how-to-hide-files-generated-by-custom-tool-in-visual-studio#3090168)做同樣的事情。但是,它們似乎不適用於有條件的項目引用,至少在VS2012中不適用。 – NightOwl888 2015-02-11 09:37:15

0

你需要在你的項目中的DLL,然後一旦它的存在右鍵單擊該DLL,選擇屬性,然後確保「複製到輸出目錄」設置爲「一直拷貝」