Msbuild ClickOnce应用程序通过Jenkins CS1704构建-已导入具有相同简单名称{whatever}的程序集

Msbuild ClickOnce应用程序通过Jenkins CS1704构建-已导入具有相同简单名称{whatever}的程序集,msbuild,.net-assembly,csc,assembly-name,Msbuild,.net Assembly,Csc,Assembly Name,我有一个winforms应用程序,它是通过单击一次发布来部署的。 假设我的测试是正确的,在同一台计算机上多次安装同一应用程序的唯一方法是为不同的程序集名称进行每次发布 我的问题是,我正在通过jenkins运行msbuild,为了完成上述任务,我将添加/p:AssemblyName={whater},这将把生成的所有程序集重命名为相同的{whater}值。如果生成的输出是1个exe和5个DLL,那么所有6个文件都将命名为{whatever} 这进而引发CS1704:已经导入了具有相同简单名称{wh

我有一个winforms应用程序,它是通过单击一次发布来部署的。 假设我的测试是正确的,在同一台计算机上多次安装同一应用程序的唯一方法是为不同的程序集名称进行每次发布

我的问题是,我正在通过jenkins运行msbuild,为了完成上述任务,我将添加/p:AssemblyName={whater},这将把生成的所有程序集重命名为相同的{whater}值。如果生成的输出是1个exe和5个DLL,那么所有6个文件都将命名为{whatever}

这进而引发CS1704:已经导入了具有相同简单名称{whatever}的程序集

只有这样才能执行msbuild生成的所有csc.exe调用,并查看是否可以为每个项目设置不同的程序集名称


或者有其他方法解决此问题吗?

这里的问题是,作为命令行参数传递给MSBuild的每个属性都被视为全局属性,并将覆盖在该调用中生成的所有项目上的属性。解决方案是引入一个只有“主”项目使用的中间属性

编辑应用程序的csproj文件以包含此内容(在已定义
AssemblyName
的位置-假设
WindowsFormsApp1
是应用程序的名称):

WindowsFormsApp1
$(覆盖SemblyName)

然后,可以使用msbuild命令使用
/p:overrideasemblyname=AnotherName
,而无需在引用的库上创建冲突的程序集名称。该属性仍然是全局定义的,但只有一个项目使用它。

嘿,Martin,谢谢你的帮助。按照指示,我将第2行包括在第1行下方。我应该替换原来的AssemblyName行吗?不,你可以保持原样。这样做的目的是在传递
/p:overrideasemblyname=AnotherName
时覆盖原始名称。我在条件中出错了。我写完信后重新命名了这家酒店,但忘了在这两个地方都这么做。。更新后的帖子现在有意义了,确实:-)似乎正在工作,我在詹金斯的工作中还有一个错误,我会解决它,并会回来奖励你的帮助,谢谢!
<AssemblyName>WindowsFormsApp1</AssemblyName>
<AssemblyName Condition="'$(OverrideAssemblyName)' != ''">$(OverrideAssemblyName)</AssemblyName>