非常令人沮丧,我有一个可移植类库 (PCL) 库,它必须在配置文件中删除 .NET 4.0 才能访问正确的 API 的“PCL 领域”。但是,这些 API 确实存在于 .NET 4.0 中,因此如果完全相同的代码位于 .NET 4.0 项目中,则它编译得很好。
我想要一种最小的持续维护方式来将此 PCL 项目中的代码重新编译为 .net 4.0,以便我可以将其包含在 Nuget 包中。
非常令人沮丧,我有一个可移植类库 (PCL) 库,它必须在配置文件中删除 .NET 4.0 才能访问正确的 API 的“PCL 领域”。但是,这些 API 确实存在于 .NET 4.0 中,因此如果完全相同的代码位于 .NET 4.0 项目中,则它编译得很好。
我想要一种最小的持续维护方式来将此 PCL 项目中的代码重新编译为 .net 4.0,以便我可以将其包含在 Nuget 包中。
只需对.csproj
.
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="MyPortableSolution.sln">
<Properties>Configuration=Release;</Properties>
</ProjectToBuild>
<ProjectToBuild Include="MyPortableSolution.sln">
<Properties>Configuration=Release;OutputPath=bin\Release.net40\;IntermediateOutputPath=obj\Release.net40\;UseNet40=true;</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
第一次替换:
<TargetFrameworkProfile>Profile46</TargetFrameworkProfile>
和:
<UseNet40 Condition=" '$(UseNet40)' == '' ">false</UseNet40>
<TargetFrameworkProfile Condition="$(UseNet40) == false">Profile46</TargetFrameworkProfile>
第二次替换:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
和:
<Import Condition="$(UseNet40) == true" Project="$(SolutionDir)\refs.targets" />
<Import Condition="$(UseNet40) == true" Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Condition="$(UseNet40) == false" Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
refs.targets
这是一个包含您需要的程序集引用的文件(从项目编辑到项目):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Reference Include="mscorlib" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
</Project>
注意:使用单独的文件,因为 Visual Studio 会解析并以其他方式显示它。
这将在其中创建您的可移植库bin\Release
和 .net 40 特定库bin\Release.net40
我想这个问题没有“一刀切”的答案。
作为第一步,尝试pcl 分析器以查看有多少类型和方法不属于 4.0 配置文件可能会很有用