![](/img/trans.png)
[英]Reference a library built in .NET 4.5.1 from a .NET 4.0 project (VSTO)
[英]Produce a .NET 4.0 library from a PCL Project where code is identical
這非常令人沮喪,我有一個可移植類庫(PCL)庫,它必須在配置文件中刪除.NET 4.0才能訪問正確的API“在PCL中”。 但是,這些API確實存在於.NET 4.0中,因此如果完全相同的代碼在.NET 4.0項目中,則編譯就可以了。
我想要一個最小的持續維護方法來重新編譯這個PCL項目中的代碼到.net 4.0,這樣我就可以將它包含在Nuget包中。
通過對.csproj
最小條件調整,可以創建一個msbuild項目來編譯可移植庫解決方案,以生成其他.net 4.0配置文件二進制文件。
<?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.net40
中的bin\\Release
和.net 40特定庫中創建可移植lib
我想這個問題沒有“一刀切”的答案。
作為第一步,嘗試使用pcl分析器以查看有多少類型和方法超出4.0配置文件可能很有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.