问题描述
我有一个PCL项目,每个平台的功能和类都不同。我现在想实现.net核心支持。但是我无法使用UserControl
之类的控件,因为未引用Microsoft.NET.Sdk.WindowsDesktop
SDK。 .net框架易于实现,因为我只需要引用每个程序集...但是在.net核心中,我不能引用该程序集...
<Project Sdk="MSBuild.Sdk.Extras">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoAndroid10.0;tizen40</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">uap10.0.17763;net472;netcoreapp3.1;$(TargetFrameworks)</TargetFrameworks>
</PropertyGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('net4')) And '$(OS)' == 'Windows_NT' ">
...
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System.Xaml" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('netcoreapp3')) And '$(OS)' == 'Windows_NT' ">
...
<SDKReference Include="Microsoft.NET.Sdk.WindowsDesktop" />
</ItemGroup>
那是我的可执行应用,引用了上面的PCL项目;
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<ProjectReference ...... />
</ItemGroup>
</Project>
我已经尝试过引用SDK,但无法正常工作。
<SDKReference Include="Microsoft.NET.Sdk.WindowsDesktop" />
解决方法
我现在想实现.net核心支持。但是我不能使用控件 之所以喜欢UserControl,是因为Microsoft.NET.Sdk.WindowsDesktop SDK 没有被引用。 .net框架易于实现,因为我 只需要引用每个程序集...但是在.net核心中,我不能 引用程序集。
经过深入研究,我发现 SDKReference 无法使用Microsoft.NET.Sdk.WindowsDesktop
。
作为建议,您可以创建一个自定义目标文件,然后将其导入到您的 PCL项目中以使用Net Core SDK。
1)在您的 PCL 项目文件夹中创建一个名为custom.targets
的文件。
2),然后将其添加到custom.targets
:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>
3)将其导入到 PCL项目的xxx.csproj
文件中。
<Import Project="$(ProjectDir)custom.targets" Condition=" $(TargetFramework.StartsWith('netcoreapp3')) And '$(OS)' == 'Windows_NT' "/>
4),然后重新启动项目。尽管有些警告提醒您某些sdk被重复引用,但是您可以忽略它们,并且对您的项目没有任何影响。
您可以检查一下,对我来说效果很好。