У меня есть два проекта, 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>