2008-10-16 36 views
9

在Visual Studio 2008(及其他)中,如果查看項目屬性,創建.NET或Silverlight應用程序時,似乎只有一個程序集名稱 - 在所有配置中。我想編譯我的應用程序:如何爲不同的配置使用不同的裝配名稱?

MyAppDebug - 在調試模式 ,只是 MyApp的 - 在釋放模式

有誰知道這是否可能?

編輯:

似乎有些人都在質疑這個問題背後的原因,所以我會解釋遠一點:

我工作的這被自動上傳到Silverlight應用程序我們的測試網站,當我到「構建解決方案」。麻煩的是,測試團隊現在正在測試在線版本,而我正在開發一個新版本。所以,我希望有一個像。\ MyApp.html這樣的URL用於QA團隊將測試的常規版本,然後是。\ MyApp.html?version = debug用於我正在處理的當前版本。

回答

1

我已經成功地實現了我之後是通過使用生成後的腳本:

if "$(ConfigurationName)"=="Debug" goto debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" 
:debug 
"$(SolutionDir)ftp.bat" "$(TargetDir)$(TargetName).xap" "$(TargetDir)$(TargetName)Debug.xap" 

我的FTP腳本基本處於這就是要上傳的文件作爲最終接受一個可選的參數。所以,我的本地計算機上的文件名都是一樣的,但在調試模式下,我們以「調試」,在文件名末尾上傳。現在我可以在我的網頁上選擇要顯示的版本。無論是屬性移動到特定的配置屬性組,或者僅僅使用條件:

+1

爲什麼不使用不同的文件夾呢? – mbx 2013-06-25 09:35:32

3

確定您可以添加生成後事件來重命名程序集。如果您的解決方案只有一個程序集,這將工作。

但是,如果您的解決方案由多個項目組成,通常您有一個項目引用由另一個問題生成的程序集。想象一下你的解決方案有兩個projets:第一個創建一個Windows Forms exe(MyApp.EXE),它引用第二個項目(MyData.DLL)創建的程序集。

在這個例子中,調試EXE將被命名爲MyAppDebug.EXE,並且它需要引用MyDataDebug.EXE。這不適用於生成後事件中的重命名。

因此,我強烈建議不要進行任何重命名。

+2

有與生成後重命名另一個問題:你失去了很多調試器集成。你基本上必須自己運行程序,然後連接調試器。 – 2010-04-04 22:37:23

2

如果你絕對有你的心臟做這一套,那麼你可以做這樣的事情在你的AssemblyInfo.cs文件:

#if DEBUG 
[assembly: AssemblyTitle("MyAssemblyDebug")] 
#else 
[assembly: AssemblyTitle("MyAssembly")] 
#endif 

然而,這是一個很值得破解。另外,MSDN文檔非常清晰,加載程序集時甚至不考慮文件名,因此進行簡單重命名不會改變程序集的整體標識。

如上所述,這通常是一個壞主意,因爲它只會引入混淆和維護問題。如果你做的是做一個後生成操作重命名文件:

重命名 「$(PROJECTDIR)斌\調試\ SomeAssembly.dll」 SomeAssemblyDebug.dll

然後你的天堂」 t真的改變了你的程序集的身份只有文件名。您可以將它命名爲Bob.dll,並且就CLR而言它仍將具有相同的標識。唯一重要的是當您使用將要部署到GAC的強命名程序集時。在這種情況下,您的不能與程序集名稱有不同的文件名。

如果你真正想重新命名的程序集名稱,而不僅僅是文件名,然後你有你的手,另外一個問題,因爲它現在是一個完全不同的組件安裝到CLR。

我想你最好的生活與已經到位的標準。如果你發現自己不得不做些奇怪的事情,也許你應該問自己爲什麼你要這樣做。可能有更好的解決方案。

10

我已經與.csproj的文件搞亂做到了這一點。例如:當你開始用這樣的.csproj搞亂

<AssemblyName>MyApp</AssemblyName> 
<AssemblyName Condition=" '$(Configuration)' == 'Debug' ">MyAppDebug</AssemblyName> 

Visual Studio中變得有些殘缺 - 例如我不能再F5/F10運行在調試模式下的項目;它告訴我,「MyApp.exe將」未找到(即調試器嘗試與錯誤的AssemblyName啓動組件)。

+1

未經測試,但我認爲,如果你讓一號線相反條件的第二條線的調試您的問題可能消失。當Visual Studio發現第一個工作時,它可能會停止解析AssemblyName。 – 2013-11-29 09:30:11