6

マルチプロジェクトソリューションを構築するときに、1つのプロジェクト(つまり、ソリューションレベルではなくプロジェクトレベル)にのみ適用される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 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いるので、これはクリックワンスビルドです
  • これはマルチプロジェクトソリューションであり、csprojファイルをターゲットにしているだけでもそのようにビルドされます。

例2が失敗する理由は、すべてのプロジェクトのAssemblyNameの名前が、渡されたアセンブリ名、つまりMyProj.Testに変更されているためです。コマンドラインから渡されるパラメーターはグローバルであるため、これはある程度意味がありますが、ここでもcsprojファイルのみを対象としています。

とにかくそれが起こります。では、msbuildコマンドラインパラメーターを渡して、MyProj.Shell.csprojファイルの1つのAssemblyNameプロパティのみを変更する方法はありますか?

4

1 に答える 1

17

問題のプロジェクト (その.csprojファイル) を編集して、指定されている場合は特別なプロパティからアセンブリ名を取得できます。

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

したがって、問題のプロジェクトをビルドするときは、このプロジェクトのみThisProjectNameOverrideAssemblyNameをオーバーライドするように渡します。AssemblyName

msbuild /p:ThisProjectNameOverrideAssemblyName=NewAssemblyName
于 2013-03-23T21:47:55.920 に答える