Skip to content

Commit 16e61d6

Browse files
authored
Add default WinMD references to the desktop templates. (#781)
* Add default WinMD references to the desktop templates. * Switch to a target. * Revert formatting.
1 parent 22f3b70 commit 16e61d6

File tree

2 files changed

+87
-26
lines changed

2 files changed

+87
-26
lines changed

nuget/Microsoft.Windows.CppWinRT.targets

Lines changed: 86 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ Copyright (C) Microsoft Corporation. All rights reserved.
2828
<CppWinRTParameters Condition="'$(CppWinRTFastAbi)'=='true'">$(CppWinRTParameters) -fastabi</CppWinRTParameters>
2929
<CppWinRTPath Condition="'$(CppWinRTPackage)' == 'true' and '$(CppWinRTPath)'==''">"$(CppWinRTPackageDir)bin\"</CppWinRTPath>
3030
<CppWinRTPath Condition="'$(CppWinRTPackage)' != 'true' and '$(CppWinRTPath)'==''">"$(CppWinRTPackageDir)"</CppWinRTPath>
31+
<!-- By default enable C++/WinRT to include target platform winmds if we didn't overide sdk references and we are not a windows store app -->
32+
<CppWinRTImplicitlyExpandTargetPlatform Condition="'$(CppWinRTImplicitlyExpandTargetPlatform)' == '' and '$(CppWinRTOverrideSDKReferences)' != 'true' and '$(WindowsStoreApp)' != 'true'">true</CppWinRTImplicitlyExpandTargetPlatform>
3133
<XamlLanguage Condition="'$(CppWinRTProjectLanguage)' == 'C++/CX'">C++</XamlLanguage>
3234
<XamlNamespace Condition="'$(XamlNamespace)' == ''">Windows.UI.Xaml</XamlNamespace>
3335
<XamlMetaDataProviderIdl Condition="'$(XamlMetaDataProviderIdl)'== ''">$(GeneratedFilesDir)XamlMetaDataProvider.idl</XamlMetaDataProviderIdl>
@@ -38,7 +40,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
3840
<CppWinRTPlatformProjectionResponseFile Condition="'$(CppWinRTPlatformProjectionResponseFile)'==''">$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.rsp</CppWinRTPlatformProjectionResponseFile>
3941
<CppWinRTReferenceProjectionResponseFile Condition="'$(CppWinRTReferenceProjectionResponseFile)'==''">$(IntDir)$(MSBuildProjectFile).cppwinrt_ref.rsp</CppWinRTReferenceProjectionResponseFile>
4042
<CppWinRTComponentProjectionResponseFile Condition="'$(CppWinRTComponentProjectionResponseFile)'==''">$(IntDir)$(MSBuildProjectFile).cppwinrt_comp.rsp</CppWinRTComponentProjectionResponseFile>
41-
43+
4244
<!-- For CX projects, CppWinRT will never output a winmd-->
4345
<!-- NOTE: We don't set a default here as the default requires evaluation of project references
4446
and this is done by the CppWinRTComputeGenerateWindowsMetadata target. -->
@@ -75,6 +77,10 @@ Copyright (C) Microsoft Corporation. All rights reserved.
7577
GetResolvedWinMD;
7678
CppWinRTCopyWinMDToOutputDirectory;
7779
</AfterMidlTargets>
80+
<ResolveReferencesDependsOn>
81+
$(ResolveReferencesDependsOn);
82+
CppWinRTImplicitlyExpandTargetPlatform
83+
</ResolveReferencesDependsOn>
7884
<ResolveAssemblyReferencesDependsOn>
7985
$(ResolveAssemblyReferencesDependsOn);GetCppWinRTProjectWinMDReferences;CppWinRTMarkStaticLibrariesPrivate;
8086
</ResolveAssemblyReferencesDependsOn>
@@ -135,6 +141,59 @@ Copyright (C) Microsoft Corporation. All rights reserved.
135141
</ItemGroup>
136142
</Target>
137143

144+
<!--
145+
The CppWinRTImplicitlyExpandTargetPlatform target will find the
146+
appropriate platform in the requested SDK, gather the
147+
list of references for that platform, and add them to the
148+
ReferencePath item which is the ItemGroup which contains
149+
resolved paths to pass to e.g. the compiler.
150+
Xaml targets do this for UWP but for desktop,
151+
apps can't opt-in to WinRT doing it for them.
152+
-->
153+
<Target Name="CppWinRTImplicitlyExpandTargetPlatform"
154+
Condition="'$(CppWinRTImplicitlyExpandTargetPlatform)' == 'true'">
155+
156+
<ItemGroup>
157+
<_TargetPlatformWinMDs Condition="'$(TargetPlatformWinMDLocation)' != ''" Include="$(TargetPlatformWinMDLocation)\**\*.winmd">
158+
<WinMDFile>true</WinMDFile>
159+
<CopyLocal>false</CopyLocal>
160+
<ReferenceGrouping>$(TargetPlatformMoniker)</ReferenceGrouping>
161+
<ReferenceGroupingDisplayName>$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName>
162+
<ResolvedFrom>CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom>
163+
<IsSystemReference>True</IsSystemReference>
164+
</_TargetPlatformWinMDs>
165+
<_TargetPlatformWinMDs Condition="'$(TargetPlatformSdkRootOverride)' != '' AND '$(TargetPlatformWinMDLocation)' == ''" Include="$(TargetPlatformSdkRootOverride)\References\$(XeWin10TargetVersion)\**\*.winmd">
166+
<WinMDFile>true</WinMDFile>
167+
<CopyLocal>false</CopyLocal>
168+
<ReferenceGrouping>$(TargetPlatformMoniker)</ReferenceGrouping>
169+
<ReferenceGroupingDisplayName>$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName>
170+
<ResolvedFrom>CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom>
171+
<IsSystemReference>True</IsSystemReference>
172+
</_TargetPlatformWinMDs>
173+
<_TargetPlatformWinMDs Condition="'$(TargetPlatformSdkRootOverride)' == '' AND '$(TargetPlatformWinMDLocation)' == ''" Include="$(WindowsSDK_MetadataPathVersioned)\**\*.winmd">
174+
<WinMDFile>true</WinMDFile>
175+
<CopyLocal>false</CopyLocal>
176+
<ReferenceGrouping>$(TargetPlatformMoniker)</ReferenceGrouping>
177+
<ReferenceGroupingDisplayName>$(TargetPlatformDisplayName)</ReferenceGroupingDisplayName>
178+
<ResolvedFrom>CppWinRTImplicitlyExpandTargetPlatform</ResolvedFrom>
179+
<IsSystemReference>True</IsSystemReference>
180+
</_TargetPlatformWinMDs>
181+
</ItemGroup>
182+
183+
<Warning Condition="'@(_TargetPlatformWinMDs)' == ''"
184+
Text="Could not find target platform winmds for the SDK specified by [$(SDKIdentifier), $(SDKVersion), $(TargetPlatformIdentifier), $(TargetPlatformMinVersion), $(TargetPlatformVersion)]"/>
185+
186+
<Message Importance="Low" Text="Including @(_TargetPlatformWinMDs)" />
187+
188+
<ItemGroup>
189+
<ReferencePath Include="@(_TargetPlatformWinMDs)" />
190+
<_ResolveAssemblyReferenceResolvedFiles Include="@(_TargetPlatformWinMDs)" />
191+
192+
<!-- Clear out 'temporary' variable -->
193+
<_TargetPlatformWinMDs Remove="@(_TargetPlatformWinMDs)" />
194+
</ItemGroup>
195+
</Target>
196+
138197
<!-- Target used only to evaluate CppWinRTGenerateWindowsMetadata if it doesn't already have a value -->
139198
<Target Name="CppWinRTComputeGenerateWindowsMetadata"
140199
DependsOnTargets="CppWinRTComputeXamlGeneratedMidlInputs;GetCppWinRTProjectWinMDReferences;$(CppWinRTComputeGenerateWindowsMetadataDependsOn)">
@@ -247,7 +306,9 @@ Copyright (C) Microsoft Corporation. All rights reserved.
247306
<_CppWinRTPlatformWinMDReferences Include="@(ReferencePath)" Condition="'%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ReferenceSourceTarget)' == 'ResolveAssemblyReference'" />
248307
<!-- Also include the winmds from the ImplicitlyExpandTargetPlatform target if it is enabled. -->
249308
<_CppWinRTPlatformWinMDReferences Include="@(ReferencePath)" Condition="'%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ResolvedFrom)' == 'ImplicitlyExpandTargetPlatform'" />
250-
<_CppWinRTPlatformWinMDReferences Include="$(CppWinRTSDKReferences)" />
309+
<!-- Also include the winmds from the CppWinRTImplicitlyExpandTargetPlatform target if it is enabled. -->
310+
<_CppWinRTPlatformWinMDReferences Include="@(ReferencePath)" Condition="'%(ReferencePath.IsSystemReference)' == 'true' and '%(ReferencePath.WinMDFile)' == 'true' and '%(ReferencePath.ResolvedFrom)' == 'CppWinRTImplicitlyExpandTargetPlatform'" />
311+
<_CppWinRTPlatformWinMDReferences Include="$(CppWinRTSDKReferences)" />
251312
<CppWinRTPlatformWinMDReferences Remove="@(CppWinRTPlatformWinMDReferences)"/>
252313
<CppWinRTPlatformWinMDReferences Include="@(_CppWinRTPlatformWinMDReferences->'%(FullPath)'->Distinct())">
253314
<WinMDPath>%(FullPath)</WinMDPath>
@@ -527,7 +588,7 @@ $(XamlMetaDataProviderPch)
527588

528589
<!-- Clean the output file if the target failed to indicate it needs to be rebuild -->
529590
<OnError ExecuteTargets="_CppWinRTCleanMdMergeOutputs" />
530-
591+
531592
</Target>
532593

533594
<!-- Only copy winmd to output folder if CppWinRTGenerateWindowsMetadata is true -->
@@ -566,11 +627,11 @@ $(XamlMetaDataProviderPch)
566627
</Hash>
567628

568629
<WriteLinesToFile Condition="!$(CppWinRTWriteOnlyWhenDifferent)"
569-
File="$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
630+
File="$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
570631
Lines="$(CppWinRTPlatformProjectionDependencyHash)"
571632
Overwrite="true" />
572633
<WriteLinesToFile Condition="$(CppWinRTWriteOnlyWhenDifferent)"
573-
File="$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
634+
File="$(IntDir)$(MSBuildProjectFile).cppwinrt_plat.cache"
574635
Lines="$(CppWinRTPlatformProjectionDependencyHash)"
575636
Overwrite="true"
576637
WriteOnlyWhenDifferent="true" />
@@ -583,7 +644,7 @@ $(XamlMetaDataProviderPch)
583644
<Target Name="_CppWinRTCleanMakePlatformProjectionOutputs">
584645
<Delete Files="$(CppWinRTPlatformProjectionResponseFile)" />
585646
</Target>
586-
647+
587648
<!-- Build the platform projection from the winmds that ship with the platform in the Windows SDK -->
588649
<!-- Note that Condition is evaluated before DependsOnTargets are run -->
589650
<Target Name="CppWinRTMakePlatformProjection"
@@ -659,7 +720,7 @@ $(XamlMetaDataProviderPch)
659720
<Target Name="_CppWinRTCleanMakeReferenceProjectionOutputs">
660721
<Delete Files="$(CppWinRTReferenceProjectionResponseFile)" />
661722
</Target>
662-
723+
663724
<!--Build reference projection from WinMD project references and dynamic library project references-->
664725
<!-- Note that Condition is evaluated before DependsOnTargets are run -->
665726
<Target Name="CppWinRTMakeReferenceProjection"
@@ -685,7 +746,7 @@ $(XamlMetaDataProviderPch)
685746
</PropertyGroup>
686747

687748
<!-- Always write the cppwinrt_ref.rsp file when the target runs, because the file is used as the output of this target. -->
688-
<WriteLinesToFile
749+
<WriteLinesToFile
689750
File="$(CppWinRTReferenceProjectionResponseFile)" Lines="$(_CppwinrtParameters)"
690751
Overwrite="true" />
691752

@@ -732,7 +793,7 @@ $(XamlMetaDataProviderPch)
732793
Lines="$(CppWinRTComponentProjectionDependencyHash)"
733794
Overwrite="true"
734795
WriteOnlyWhenDifferent="true" />
735-
796+
736797
<ItemGroup>
737798
<FileWrites Include="$(IntDir)$(MSBuildProjectFile).cppwinrt_comp.cache" />
738799
</ItemGroup>
@@ -794,7 +855,7 @@ $(XamlMetaDataProviderPch)
794855
<WriteLinesToFile
795856
File="$(CppWinRTComponentProjectionResponseFile)" Lines="$(_CppwinrtParameters)"
796857
Overwrite="true" />
797-
858+
798859
<Message Text="$(CppWinRTCommand)" Importance="$(CppWinRTVerbosity)" Condition="'@(_CppwinrtCompInputs)' != ''"/>
799860
<Exec Command="$(CppWinRTCommand)" Condition="'@(_CppwinrtCompInputs)' != ''"/>
800861

@@ -826,20 +887,20 @@ $(XamlMetaDataProviderPch)
826887

827888
<!--Append any additional item metadata after all default and project settings have been applied-->
828889
<ItemDefinitionGroup>
829-
<ClCompile>
830-
<AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>
831-
<AdditionalOptions Condition="'%(ClCompile.LanguageStandard)' == 'stdcpp17'">%(AdditionalOptions) /await</AdditionalOptions>
832-
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(GeneratedFilesDir)</AdditionalIncludeDirectories>
833-
</ClCompile>
834-
<Midl Condition="'$(CppWinRTModernIDL)' != 'false'">
835-
<AdditionalMetadataDirectories Condition="'%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' != ''">$(WindowsSDK_MetadataFoundationPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories>
836-
<AdditionalMetadataDirectories Condition="'%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' == ''">$(WindowsSDK_MetadataPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories>
837-
<AdditionalOptions>%(AdditionalOptions) /nomidl</AdditionalOptions>
838-
</Midl>
839-
<Link>
840-
<AdditionalDependencies Condition="'$(CppWinRTLibs)' != 'false'">%(AdditionalDependencies);WindowsApp.lib</AdditionalDependencies>
841-
<AdditionalDependencies Condition="'$(CppWinRTFastAbi)'=='true'">%(AdditionalDependencies);$(CppWinRTPackageDir)build\native\lib\$(Platform)\cppwinrt_fast_forwarder.lib</AdditionalDependencies>
842-
</Link>
890+
<ClCompile>
891+
<AdditionalOptions>%(AdditionalOptions) /bigobj</AdditionalOptions>
892+
<AdditionalOptions Condition="'%(ClCompile.LanguageStandard)' == 'stdcpp17'">%(AdditionalOptions) /await</AdditionalOptions>
893+
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(GeneratedFilesDir)</AdditionalIncludeDirectories>
894+
</ClCompile>
895+
<Midl Condition="'$(CppWinRTModernIDL)' != 'false'">
896+
<AdditionalMetadataDirectories Condition="'%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' != ''">$(WindowsSDK_MetadataFoundationPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories>
897+
<AdditionalMetadataDirectories Condition="'%(AdditionalMetadataDirectories)' == '' And '$(WindowsSDK_MetadataFoundationPath)' == ''">$(WindowsSDK_MetadataPath);%(AdditionalMetadataDirectories)</AdditionalMetadataDirectories>
898+
<AdditionalOptions>%(AdditionalOptions) /nomidl</AdditionalOptions>
899+
</Midl>
900+
<Link>
901+
<AdditionalDependencies Condition="'$(CppWinRTLibs)' != 'false'">%(AdditionalDependencies);WindowsApp.lib</AdditionalDependencies>
902+
<AdditionalDependencies Condition="'$(CppWinRTFastAbi)'=='true'">%(AdditionalDependencies);$(CppWinRTPackageDir)build\native\lib\$(Platform)\cppwinrt_fast_forwarder.lib</AdditionalDependencies>
903+
</Link>
843904
</ItemDefinitionGroup>
844-
905+
845906
</Project>

vsix/ProjectTemplates/VC/Windows Desktop/ConsoleApplication/ConsoleApplication.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
3838
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
3939
<CharacterSet>Unicode</CharacterSet>
40-
</PropertyGroup>
40+
</PropertyGroup>
4141
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
4242
<UseDebugLibraries>true</UseDebugLibraries>
4343
<LinkIncremental>true</LinkIncremental>

0 commit comments

Comments
 (0)