在构建多项目解决方案时,有没有办法为msbuild指定一个仅适用于一个项目(即项目级而非解决方案级别)的命令行参数?
我问的原因是因为我想要启用并排安装一次点击部署。让我举个例子:
1)这是有效的
MSBuild“C:\ Dev \ MyProj \ MyProj.Shell \ MyProj.Shell.csproj” / p:SkipInvalidConfigurations = true / target:publish / p:OutputPath =“C:\ Dev \ Temp \”/ p:ApplicationVersion = 1.2.3.4 / p:ProductName =“My Proj”/ p:Configuration =“Release”/ p:Platform =“Mixed 平台“/详述:诊断
2)这不是
MSBuild“C:\ Dev \ MyProj \ MyProj.Shell \ MyProj.Shell.csproj” / p:SkipInvalidConfigurations = true / target:publish / p:OutputPath =“C:\ Dev \ Temp \”/ p:ApplicationVersion = 1.2.3.4 / p:ProductName =“我的Proj测试”/ p:配置=“发布” / p:平台=“混合平台”/详细程度:诊断 /p:AssemblyName="MyProj.Test“
只是澄清并重申几点:
/p:AssemblyName="MyProj.Text"
/target:publish
所以这是一次点击构建我知道示例2 失败的原因是因为它使用传入的程序集名称重命名每个项目的AssemblyName,即 MyProj.Test 。这是有道理的,因为通过命令行传入的参数是全局的,但是我再次将目标定位在csproj文件中。
无论如何,这就是发生的事情。那么有没有办法传入一个msbuild命令行参数来改变MyProj.Shell.csproj文件中的一个AssemblyName属性?
答案 0 :(得分:14)
您可以编辑有问题的项目( .csproj 文件),以便从特殊属性中获取程序集名称(如果已指定),即:
<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' == '' " >UsualAssemblyName</AssemblyName>
<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' != '' " >$(ThisProjectNameOverrideAssemblyName)</AssemblyName>
因此,当您构建有问题的项目时,您只需将ThisProjectNameOverrideAssemblyName
传递给此项目的覆盖AssemblyName
:
msbuild /p:ThisProjectNameOverrideAssemblyName=NewAssemblyName