0

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

我的问题是我正在通过 jenkins 运行 msbuild,并且为了完成上述操作,我将添加 /p:AssemblyName={whatever},这会将构建生成的所有程序集重命名为相同的 {whatever} 值。如果我构建的输出是 1 个 exe 和 5 个 dll,则所有 6 个文件都将命名为 {whatever}。

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

执行 msbuild 生成的所有 csc.exe 调用并查看是否可以为每个项目设置不同的程序集名称的唯一方法是?

还是有其他方法可以解决这个问题?

4

1 回答 1

1

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

编辑应用程序的 csproj 文件以包含它(在AssemblyName已经定义的地方 - 假设这里WindowsFormsApp1是应用程序的名称):

<AssemblyName>WindowsFormsApp1</AssemblyName>
<AssemblyName Condition="'$(OverrideAssemblyName)' != ''">$(OverrideAssemblyName)</AssemblyName>

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

于 2017-05-23T17:06:17.763 回答