Command line 用于更改AssemblyName的项目级别而非解决方案级别的Msbuild命令行参数

Command line 用于更改AssemblyName的项目级别而非解决方案级别的Msbuild命令行参数,command-line,msbuild,clickonce,Command Line,Msbuild,Clickonce,在生成多项目解决方案时,是否有任何方法为msbuild指定仅适用于一个项目(即项目级别而非解决方案级别)的命令行参数 我问这个问题的原因是因为我想启用click once部署的并行安装。让我举一个例子: 1) 这很有效 MSBuild“C:\Dev\MyProj\MyProj.Shell\MyProj.Shell.csproj” /p:SkipInValidConfiguration=true/目标:发布 /p:OutputPath=“C:\Dev\Temp\”/p:ApplicationVer

在生成多项目解决方案时,是否有任何方法为msbuild指定仅适用于一个项目(即项目级别而非解决方案级别)的命令行参数

我问这个问题的原因是因为我想启用click once部署的并行安装。让我举一个例子:

1) 这很有效

MSBuild“C:\Dev\MyProj\MyProj.Shell\MyProj.Shell.csproj” /p:SkipInValidConfiguration=true/目标:发布 /p:OutputPath=“C:\Dev\Temp\”/p:ApplicationVersion=1.2.3.4 /p:ProductName=“我的项目”/p:Configuration=“发布”/p:Platform=“混合 平台“/详细性:诊断性

2) 这并不重要

MSBuild“C:\Dev\MyProj\MyProj.Shell\MyProj.Shell.csproj” /p:SkipInValidConfiguration=true/目标:发布 /p:OutputPath=“C:\Dev\Temp\”/p:ApplicationVersion=1.2.3.4 /p:ProductName=“我的项目测试”/p:Configuration=“发布” /p:Platform=“Mixed Platforms”/verbosity:diagnostic /p:AssemblyName=“MyProj.Test”

我只想澄清并重复几点:

  • 1和2之间的唯一区别是
    /p:AssemblyName=“MyProj.Text”
  • 我使用的是
    /target:publish
    ,所以这是一个单击一次的构建
  • 这是一个多项目的解决方案,即使我只是针对一个csproj文件,它也会这样构建
我知道示例2失败的原因是因为它使用传入的程序集名称(即MyProj.Test)重命名每个项目的AssemblyName。这是有意义的,因为通过命令行传入的参数是全局的,但我的目标仍然是csproj文件


不管怎样,事情就是这样。那么,是否有任何方法可以传入msbuild命令行参数以仅更改MyProj.Shell.csproj文件中的一个AssemblyName属性?

如果指定了特殊属性,则可以编辑有问题的项目(其.csproj文件)以从特殊属性获取程序集名称,即:

<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' == '' " >UsualAssemblyName</AssemblyName>
<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' != '' " >$(ThisProjectNameOverrideAssemblyName)</AssemblyName>

谢谢你,Isantipov,这是一个合理的可能性,但是,我正在寻找一种通用的方法,在不修改csproj文件的情况下为项目执行此操作。我想答案很简单,“不,你做不到”。我花了两天的时间试图解决这个问题。我不明白为什么它不起作用,所以谢谢你们两位对问题的理解,能够正确地提出问题,也谢谢你们的答案!这救了我。我在为win forms应用程序设置CI/CD流程方面投入了大量的工作,我需要同时安装win forms。问题是解决方案是一个多项目解决方案,我覆盖的属性被应用于所有相关项目,导致构建失败。
msbuild /p:ThisProjectNameOverrideAssemblyName=NewAssemblyName