簡體   English   中英

從PCL項目生成.NET 4.0庫,其中代碼完全相同

[英]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配置文件二進制文件。

Build.proj:

<?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>

在MyPortableProj.csproj的兩個區域中進行更改:

首先替換:

<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會解析並顯示它。

msbuild Build.proj

這將在bin\\Release.net40中的bin\\Release和.net 40特定庫中創建可移植lib

我想這個問題沒有“一刀切”的答案。

作為第一步,嘗試使用pcl分析器以查看有多少類型和方法超出4.0配置文件可能很有用

  • 如果它只是少數幾種方法,那么你可以使用較低的配置文件pcl以及少量平台特定的抽象來找到前進的方法。
  • 但如果存在許多不兼容性,那么您可能需要找到一些文件鏈接或項目文件轉換解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM