有条件地更改主程序集名称

时间:2017-11-08 10:56:36

标签: .net wpf visual-studio msbuild msbuild-propertygroup

由于ClickOnce,我需要为所使用的每个环境/配置更改WPF应用程序的程序集名称。

配置是:

  • 调试
  • 测试
  • 推出

因此,为了能够将3个环境发布到ClickOnce并将所有这些环境安装在一台机器中而没有一个覆盖另一台机器,我们需要为所有三个环境的解决方案的主项目提供不同的程序集名称。程序集的名称如下:

  • MyApp.Client.Debug
  • MyApp.Client.Testing
  • MyApp.Client

感谢this StackOverflow answer,我设法做到了,而且效果很好。 MyApp.Client.csproj的代码是:

 <PropertyGroup>
...
    <AssemblyName>MyApp.Client</AssemblyName>
...
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <AssemblyName>MyApp.Client.Debug</AssemblyName>
    ...
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Testing|AnyCPU' ">
    <AssemblyName>MyApp.Client.Testing</AssemblyName>
    ...
</PropertyGroup>

我可以将它发布到我的不同环境中,并且运行良好,我可以执行我的应用程序并使用它。但是我无法在Visual Studio中调试它,似乎IDE在寻找&#34; MyApp.Client&#34;作为应用程序入口点并抛出这样的东西:

  

Visual Studio无法启动调试,因为调试目标&#39; D:\ Code \ MySolution \ MyApp \ bin \ Testing \ MyApp.Client.exe&#39;不见了。请构建项目并重试,或者相应地设置OutputPath和AssemblyName属性以指向目标程序集的正确位置。

正在进行测试时,它应该搜索MyApp.Client.Testing.exe,但这并没有发生。我一直在谷歌上搜索这个错误,但我还没有找到解决方案。我找到的所有引用都讨论了更改的OutputPath和类似的东西,但我认为这不是问题,因为OutputPath没问题,问题是可执行文件名。

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

  

当有条件地更改主程序集名称

时,调试在VS2017中不起作用

这是因为 Visual Studio在您处于调试模式时调用默认属性设置Project->Properties->Application->Assembly name)而不是访问整个.csproj文件以生成相应的{{ 1}}与构建和发布一样,.exe文件中的修改不会影响默认属性。例如,当您选择配置为.csproj时,属性窗口中的Testing的默认属性仍为Assembly name

enter image description here

要解决此问题,您应手动更改默认属性MyApp.Client ,例如MyApp.Client.Testing:

enter image description here