2008-10-16 49 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

相关问题