2014-10-08 53 views
1

它似乎應該很簡單,但基本上我有兩個類庫的配置。一個是正​​常的.NET 4.0配置,另一個配置爲註冊COM Interop,另外還定義了一個編譯符號,這樣我就可以使用預處理器指令解決一些與COM相關的怪癖。根據配置更改輸出dll的名稱

問題是,在部署時,這兩個DLL必須位於調用應用程序的相同文件夾中才能使用它們(通過設計,對此無能爲力)。編譯每個配置到其各自的bin/子文件夾時,我已經得到了一切工作,包括使用不同的強名稱密鑰對兩個配置進行簽名,以便GAC可以看到兩個不同的程序集,即使具有相同的名稱和版本。

但是將它們放在同一個文件夾中需要重新命名,這就是問題所在。

什麼將是了不起是如果在Visual Studio中,我可以有條件地在應用程序選項卡中設置Assembly Name屬性,但它看起來像該選項卡是項目範圍,而不是配置範圍。除此之外,是否有任何方法可以指定不同的文件名,這樣不會導致運行時問題,更不用說開發人員的理智問題了?我的目標是能夠爲COM不支持的.NET客戶端提供功能,同時仍與COM兼容。我非常希望不要將所有內容複製並粘貼到另一個只有不同名稱的項目中...

回答

3

您可以通過編輯您的.csproj文件來完成此操作。從主<PropertyGroup>取出<AssemblyName>元素,並把它放在各自的配置特定PropertyGroups:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <AssemblyName>StackOverflow26265487.Debug</AssemblyName> 
    <!-- ... --> 
</PropertyGroup> 
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <AssemblyName>StackOverflow26265487.Release</AssemblyName> 
    <!-- ... --> 
</PropertyGroup> 
+0

這工作!我總是害怕直接編輯項目文件,因爲過去這樣做會導致嚴重的頭痛......謝謝! – helrich 2014-10-09 12:04:49

+0

但是,我們不能讓F5/F10在Visual Studio中以調試模式運行項目(即調試器試圖用錯誤的AssemblyName啓動程序集)。我們如何解決這個問題? – Kaizen 2016-10-19 04:23:54