可能ですが、ですが、MSBuildトリッキーが少し必要です。参照されるプロジェクトの構築方法は、@(ProjectReferenceWithConfiguration)アイテム配列に、Microsoft.Common.targetsファイルの操作を使用することです。プロジェクトがこのようにこのアイテム配列に含まれていて、あるプロジェクトでは他のプロジェクトではない場合、
<!-- pseudo-code for what Microsoft.Common.targets creates -->
<ItemGroup>
<ProjectReferenceWithConfiguration Include="ReferencedProject.csproj">
<AdditionalProperties>DefineConstants=EDITOR</AdditionalProperties>
</ProjectReferenceWithConfiguration>
</ItemGroup>
...あなたが望むように構築されます。あなたはどのようにこれを設定しますか?さて、独自のカスタムターゲットで@(ProjectReferenceWithConfiguration)アイテム配列を作成し、AdditionalPropertiesメタデータ値を追加することができます。カスタマイズの位置を逆転させ、より汎用的な解決のためにこのような何か...
<!-- inside referencing project -->
<Target Name="AddEditorConstant"
AfterTargets="AssignProjectConfiguration"
BeforeTargets="_SplitProjectReferencesByFileExistence">
<ItemGroup>
<ProjectReferenceWithConfiguration
Condition="'%(Identity)' == 'ReferencedProject.csproj'>
<AdditionalProperties>DefineConstants=EDITOR</AdditionalProperties>
</ProjectReferenceWithConfiguration>
</ItemGroup>
</Target>
(私は実際にこれを実行しなかった、注意して、いくつかの実験が必要な場合があります)
、内部に置きますむしろ参照内部よりも参照プロジェクトは、あなたの代わりに、すべての参照にカスタムプロパティとして参照して親プロジェクトを注入
<!-- somewhere common to all projects -->
<Target Name="InjectReferencingProject"
AfterTargets="AssignProjectConfiguration"
BeforeTargets="_SplitProjectReferencesByFileExistence">
<ItemGroup>
<ProjectReferenceWithConfiguration>
<AdditionalProperties>ReferencingProject=$(MSBuildProjectFile)</AdditionalProperties>
</ProjectReferenceWithConfiguration>
</ItemGroup>
</Target>
そして、ReferencedProject.csprojの内側に、あなたはそれに基づいて欲しいものは何でも修正することができます親pr ojectは参照を持っています。
<!-- inside referenced project -->
<PropertyGroup>
<DefineConstants>default-constants</DefineConstants>
<DefineConstants
Condition="'$(ReferencingProject)' == 'SomeSpecialProject.csproj'"
>$(DefineConstants);EDITOR</DefineConstants>
</PropertyGroup>
cool、私はそれが動作することがわかります。ちょっと思ったことです:参照されているプロジェクトが、参照しているプロジェクトのDefineConstantsプロパティを "継承"することはできますか? –
この種の継承のようなものは本当にありません。参照プロジェクトがビルドされると、MSBuildタスクと他のすべての参照プロジェクトとともに明示的にビルドされます。 AdditionalPropertiesメタデータには、余分な構成情報をプロジェクトに個別に渡すオプションがあります。 –
私はより洗練されたソリューションを望んでいましたが、そうではないようです。あなたの返信に感謝:) –