Это возможно , но требует немного хитрости 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, изменитьвсе, что вы хотите на основе ссылки на родительский проект,
<!-- inside referenced project -->
<PropertyGroup>
<DefineConstants>default-constants</DefineConstants>
<DefineConstants
Condition="'$(ReferencingProject)' == 'SomeSpecialProject.csproj'"
>$(DefineConstants);EDITOR</DefineConstants>
</PropertyGroup>