有没有办法在构建多项目解决方案时为msbuild指定一个仅适用于一个项目(即项目级别而不是解决方案级别)的命令行参数?
我之所以这样问,是因为我想启用click-once部署的并行安装。让我举个例子:
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 Platforms" /verbosity:diagnostic
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="My Proj Test" /p:Configuration="Release" /p:Platform="Mixed Platforms" /verbosity:diagnostic /p:AssemblyName="MyProj.Test"
只是为了澄清和重申一些要点:
- 1和2之间唯一的区别是
我知道示例2失败的原因是因为它使用传入的程序集名称重命名了每个项目的AssemblyName,即MyProj.Test。这在某种程度上是有道理的,因为通过命令行传递的参数是全局的,但我只针对csproj文件进行定位。无论如何,这就是发生的事情。那么有没有办法传递一个msbuild命令行参数以仅更改MyProj.Shell.csproj文件中的一个AssemblyName属性呢?
我之所以这样问,是因为我想启用click-once部署的并行安装。让我举个例子:
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 Platforms" /verbosity:diagnostic
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="My Proj Test" /p:Configuration="Release" /p:Platform="Mixed Platforms" /verbosity:diagnostic /p:AssemblyName="MyProj.Test"
只是为了澄清和重申一些要点:
- 1和2之间唯一的区别是
/p:AssemblyName="MyProj.Text"
- 我使用/target:publish
,所以这是一个click-once构建
- 这是一个多项目解决方案,即使我只针对一个csproj文件进行定位,它也会按此方式构建。我知道示例2失败的原因是因为它使用传入的程序集名称重命名了每个项目的AssemblyName,即MyProj.Test。这在某种程度上是有道理的,因为通过命令行传递的参数是全局的,但我只针对csproj文件进行定位。无论如何,这就是发生的事情。那么有没有办法传递一个msbuild命令行参数以仅更改MyProj.Shell.csproj文件中的一个AssemblyName属性呢?