eng/build/SharedReferences.targets (35 lines of code) (raw):
<Project>
<Target Name="IncludeSharedItems"
BeforeTargets="BeforeCompile"
DependsOnTargets="_IncludeSharedCompile;_IncludeSharedEmbeddedResource"
Condition="'@(SharedReference)' != ''" />
<Target Name="_IncludeSharedCompile">
<MSBuild Projects="@(SharedReference)" Targets="GetSharedCompileItems" RebaseOutputs="true">
<Output TaskParameter="TargetOutputs" ItemName="SharedCompile" />
</MSBuild>
<ItemGroup>
<Compile Include="@(SharedCompile)" LinkBase="%(SharedCompile.SharedLinkBase)" Visible="false" />
</ItemGroup>
</Target>
<Target Name="_IncludeSharedEmbeddedResource">
<MSBuild Projects="@(SharedReference)" Targets="GetSharedEmbeddedResourceItems" RebaseOutputs="true">
<Output TaskParameter="TargetOutputs" ItemName="SharedEmbeddedResource" />
</MSBuild>
<ItemGroup>
<EmbeddedResource Include="@(SharedEmbeddedResource)" LinkBase="%(SharedEmbeddedResource.SharedLinkBase)" Visible="false" />
</ItemGroup>
</Target>
<Target Name="GetSharedCompileItems" Outputs="@(_SharedCompile)">
<ItemGroup>
<_SharedCompile Include="@(Compile)" SharedLinkBase="$(MSBuildProjectName)" />
</ItemGroup>
</Target>
<Target Name="GetSharedEmbeddedResourceItems" Outputs="@(_SharedEmbeddedResource)">
<ItemGroup>
<_SharedEmbeddedResource Include="@(EmbeddedResource)" SharedLinkBase="$(MSBuildProjectName)">
<!-- We need to explicitly set LogicalName to ensure the receiving project will get the same logical name our designer .cs file was generated with -->
<RecursiveNamespace>$([System.String]::Copy('%(RecursiveDir)').Replace($([System.IO.Path]::DirectorySeparatorChar.ToString()), '.'))</RecursiveNamespace>
<LogicalName Condition="'%(EmbeddedResource.LogicalName)' == ''">$(RootNamespace).%(_SharedEmbeddedResource.RecursiveNamespace)%(Filename).resources</LogicalName>
</_SharedEmbeddedResource>
</ItemGroup>
</Target>
</Project>