Bladeren bron

Port native project ref changes to 2.1 (#6071)

Justin Kotalik 7 jaren geleden
bovenliggende
commit
167695fad2

+ 1 - 0
Directory.Build.props

@@ -46,5 +46,6 @@
   <Import Project="eng\targets\Wix.Common.props"  Condition="'$(MSBuildProjectExtension)' == '.wixproj'" />
   <Import Project="eng\targets\CSharp.Common.props"  Condition="'$(MSBuildProjectExtension)' == '.csproj'" />
   <Import Project="eng\targets\Cpp.Common.props"  Condition="'$(MSBuildProjectExtension)' == '.vcxproj'" />
+  <Import Project="eng\targets\ResolveIisReferences.targets" Condition=" '$(MSBuildProjectExtension)' != '.vcxproj' " />
 
 </Project>

+ 83 - 0
eng/targets/ResolveIisReferences.targets

@@ -0,0 +1,83 @@
+<!--
+The targets in this file resolve References to ANCM into ProjectReferences,
+with the right MSBuild incantations to get output copied to the right place.
+-->
+<Project>
+  <Choose>
+    <!-- IIS native projects only build on Windows with MSBuild.exe -->
+    <When Condition="'$(OS)' == 'Windows_NT' AND '$(MSBuildRuntimeType)' != 'Core' ">
+      <ItemGroup Condition=" '@(Reference->AnyHaveMetadataValue('Identity', 'AspNetCoreModuleV1'))' == 'true' ">
+        <Reference Remove="AspNetCoreModuleV1" />
+        <NativeProjectReference Include="$(MSBuildThisFileDirectory)src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj" />
+      </ItemGroup>
+
+      <ItemGroup Condition="@(NativeProjectReference->Count()) != 0">
+        <!-- TODO: investigate building just one arch at a time. -->
+        <ProjectReference Include="@(NativeProjectReference)">
+          <!-- Set the arch-->
+          <SetPlatform>Platform=x64</SetPlatform>
+          <!-- The base path for the output. -->
+          <LinkBase>x64\%(HandlerPath)\</LinkBase>
+          <!-- This reference assembly doesn't need -->
+          <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+          <!-- NativeContent is a custom type of item group which is assigned a target path after project references are resolved.  -->
+          <OutputItemType>NativeContent</OutputItemType>
+          <!-- Set the copy policy. -->
+          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+          <!-- This instructs the ProjectRef protocol to collect symbols as well as built output -->
+          <Targets>Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup</Targets>
+          <!-- Optimization. Native projects don't have a .NET TargetFramework -->
+          <SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
+          <UndefineProperties>TargetFramework</UndefineProperties>
+          <!-- Don't put this reference into generated .nuspec -->
+          <PrivateAssets>All</PrivateAssets>
+          <!-- Publish assets from this reference -->
+          <Publish>true</Publish>
+        </ProjectReference>
+
+        <ProjectReference Include="@(NativeProjectReference)">
+          <!-- Set the arch-->
+          <SetPlatform>Platform=x86</SetPlatform>
+          <!-- The base path for the output. -->
+          <LinkBase>x86\%(HandlerPath)\</LinkBase>
+          <!-- This reference assembly doesn't need -->
+          <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+          <!-- NativeContent is a custom type of item group which is assigned a target path after project references are resolved.  -->
+          <OutputItemType>NativeContent</OutputItemType>
+          <!-- Set the copy policy. -->
+          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+          <!-- This instructs the ProjectRef protocol to collect symbols as well as built output -->
+          <Targets>Build;BuiltProjectOutputGroup;DebugSymbolsProjectOutputGroup</Targets>
+          <!-- Optimization. Native projects don't have a .NET TargetFramework -->
+          <SkipGetTargetFrameworkProperties>true</SkipGetTargetFrameworkProperties>
+          <UndefineProperties>TargetFramework</UndefineProperties>
+          <!-- Don't put this reference into generated .nuspec -->
+          <PrivateAssets>All</PrivateAssets>
+          <!-- Publish assets from this reference -->
+          <Publish>true</Publish>
+        </ProjectReference>
+
+        <NativeProjectReference Remove="@(NativeProjectReference)" />
+      </ItemGroup>
+    </When>
+  </Choose>
+
+  <Target Name="_GetNativeContentCopyToOutputDirectoryItems"
+          BeforeTargets="GetCopyToOutputDirectoryItems"
+          DependsOnTargets="ResolveProjectReferences">
+
+    <ItemGroup>
+      <!-- Prepend LinkBase to output path. -->
+      <NativeContent>
+        <Link>%(LinkBase)%(FileName)%(Extension)</Link>
+        <!-- Don't put this content in a nuget package. -->
+        <Pack>false</Pack>
+      </NativeContent>
+    </ItemGroup>
+
+    <!-- Add the item to the ContentWithTargetPath group, which is then used by GetCopyToOutputDirectoryItems to copy to the correct output location. -->
+    <AssignTargetPath Files="@(NativeContent)" RootFolder="$(MSBuildProjectDirectory)">
+      <Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPath" />
+    </AssignTargetPath>
+  </Target>
+</Project>

+ 2 - 4
src/Servers/IIS/.gitignore

@@ -35,10 +35,8 @@ project.lock.json
 *.tlog
 *.CppClean.log
 *msbuild.log
-src/*/*/Debug/
-src/*/*/x64/Debug/
-src/*/*/Release/
-src/*/*/x64/Release/
+Debug/
+Release/
 x64/
 *vcxproj.filters
 *.aps

+ 0 - 5
src/Servers/test/FunctionalTests/ServerComparison.FunctionalTests.csproj

@@ -9,11 +9,6 @@
     <Content Include="*.config;*.conf" CopyToPublishDirectory="PreserveNewest" CopyToOutputDirectory="PreserveNewest" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(OS)' == 'Windows_NT'">
-    <!-- Temporary work around until ANCM ProjectReference changes are in 2.1 -->
-    <PackageReference Include="Microsoft.AspNetCore.AspNetCoreModuleV1" Version="$(MicrosoftAspNetCoreAspNetCoreModuleV1PackageVersion)" />
-  </ItemGroup>
-
   <ItemGroup>
     <Reference Include="Microsoft.AspNetCore.Server.IntegrationTesting" />
     <Reference Include="Microsoft.Extensions.Logging" />

+ 3 - 1
src/Servers/testassets/TestSites/ServerComparison.TestSites.csproj

@@ -1,12 +1,14 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
 
+  <Import Project="$(RepositoryRoot)src\Servers\IIS\build\testsite.props" />
+
   <PropertyGroup>
     <TargetFrameworks>netcoreapp2.1;netcoreapp2.0;net461</TargetFrameworks>
     <RuntimeIdentifiers>win7-x86;win7-x64;linux-x64;osx-x64</RuntimeIdentifiers>
   </PropertyGroup>
 
   <ItemGroup Condition="'$(OS)' == 'Windows_NT'">
-      <PackageReference Include="Microsoft.AspNetCore.AspNetCoreModuleV1" Version="$(MicrosoftAspNetCoreAspNetCoreModuleV1PackageVersion)" />
+    <NativeProjectReference Include="$(MSBuildThisFileDirectory)src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj" />
   </ItemGroup>
 
   <ItemGroup>