我有一个winforms应用程序,通过点击一次发布部署。 假设我的测试是正确的,在同一台机器上安装同一个应用程序的唯一方法是,每个发布都是针对不同的程序集名称。
我的问题是我正在通过jenkins运行msbuild,为了完成上述操作,我将添加/ p:AssemblyName = {whatever},它会将构建生成的所有程序集重命名为同样的{whatever}值。如果我的构建的输出是1个exe和5个dll,则所有6个文件将被命名为{whatever}。
反过来又引发CS1704:已经导入了具有相同简单名称{whatever}的程序集。
唯一的办法是执行msbuild生成的所有csc.exe调用,我自己,看看我是否可以为每个项目设置不同的程序集名称?
还是有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
这里的问题是,作为命令行参数传递给MSBuild的每个属性都被视为全局属性,并将覆盖该调用中构建的所有项目的属性。解决方案是引入只有“主”项目消耗的中间属性。
编辑应用程序的csproj文件以包含此文件(在AssemblyName
已定义的位置 - 假设此处WindowsFormsApp1
是应用程序的名称):
<AssemblyName>WindowsFormsApp1</AssemblyName>
<AssemblyName Condition="'$(OverrideAssemblyName)' != ''">$(OverrideAssemblyName)</AssemblyName>
然后,您可以使用/p:OverrideAssemblyName=AnotherName
使用msbuild命令,而不会在引用的库上创建冲突的程序集名称。该属性仍然是全局定义的,但只有一个项目使用它。