Как гарантировать, что ProjectReferece будет уважать импортированные цели / реквизиты в указанном проекте - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть два проекта, A.csproj и B.csproj, где B ссылается на A по ProjectReference.И B импортирует общий файл целей / реквизитов C. Общая цепочка ссылок имеет вид

A - ( ProjectReference ) -> B - (Импорт) -> C

Проблема в том, что:

Элементы / свойства, определенные в C, не видны для целей, определенных в A.

Однако, если я изменю цепочку на A - ( Import ) -> B - (Импорт) -> C, эти элементы / свойства видны для целей, определенных в A.

Обратите внимание, что это довольно распространенный сценарий, когда B устанавливает базовый пакет pacakge, содержащий дополнительные свойства/ items, позже A зависит от B для достижения функциональности высокого уровня и не требует повторной установки пакета nuget.

EDIT1: добавьте пример структуры папок проекта A, B и пакета C следующим образом:

<ROOT>--A--A.csproj
--------B--B.csproj
--------packages--C--build--C.props
----------------------------C.targets
---------------------lib--a.ini
--------------------------b.ini

A.csproj :

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!--
    <Import Project="..\B\B.csproj" />
    -->
    <ItemGroup>
    <ProjectReference Include="..\B\B.csproj">
    <Project>{20129E3E-FE37-4BEF-81A9-DA8F3AA7764B}</Project>
    <Name>B</Name>
    </ProjectReference>
    </ItemGroup>
    <Target Name="Build">
    <Message Text="in A, This is my list of MyPackageSourceFilesProperty: $(MyPackageSourceFilesProperty)"/>
    <Message Text="------" />
    <Message Text="in A, This is my list of BingoInB: %(BingoInB.FileName)"/>
    <Message Text="------" />
    <Message Text="in A, This is my list of MyPackageSourceFiles: %(MyPackageSourceFiles.FileName)"/>
    <Message Text="------" />
    <Message Text="in A, This is my list of ini files: %(Content.FileName)"/>
    </Target>
    </Project>

B.csproj :

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="..\packages\C\build\C.props" Condition="Exists('..\packages\C\build\C.props')" />
    <Target Name="Build">
    <Message Text="in B, This is my list of MyPackageSourceFilesProperty: $(MyPackageSourceFilesProperty)"/>
    <Message Text="------" />
    <Message Text="in B, This is my list of MyPackageSourceFiles: %(MyPackageSourceFiles.FileName)"/>
    <Message Text="------" />
    <Message Text="in B, This is my list of ini files: %(Content.FileName)"/>
    </Target>
    <Import Project="..\packages\C\build\C.targets" Condition="Exists('..\packages\C\build\C.targets')" />
    </Project>

C.цели :

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
    <MyPackageSourceFiles Include="$(MSBuildThisFileDirectory)\..\lib\net45\*.*" />
    <Content Include="@(MyPackageSourceFiles)">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    </ItemGroup>
    </Project>

C.props :

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
    <MyPackageSourceFilesProperty>$(MSBuildThisFileDirectory)\..\lib\net45\*.*</MyPackageSourceFilesProperty>
    </PropertyGroup>
    </Project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...