当前位置: 首页 > 知识库问答 >
问题:

如何使用CSProj对一个.NET核心类库进行多目标化?

宗政学
2023-03-14

当.NET Core仍然使用project.json格式时,您可以构建一个针对多个框架(例如net451、NETCoreApp1.0)的类库。

现在正式的项目格式是使用MSBuild的csproj,那么如何指定多个框架作为目标呢?我试图从VS2017中的项目设置中寻找这一点,但我只能针对.NET核心框架中的一个框架(它甚至没有列出我确实安装的其他完整的.NET framework版本):

共有1个答案

巩才捷
2023-03-14

您需要手动编辑项目文件,并将s添加到默认的TargetFramework中,基本上将其更改为TargetFramework。然后您用一个;分离器。

此外,您还可以手动或使用VS Nuget包管理器将Nuget包引用放入条件项组中。

以下是您的.csproj应该是什么样子:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net452'">
    <PackageReference Include="Microsoft.Azure.DocumentDB">
      <Version>1.12.0</Version>
    </PackageReference>
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
    <PackageReference Include="Microsoft.Azure.DocumentDB.Core">
    <Version>1.1.0</Version>
    </PackageReference>
  </ItemGroup>
</Project>

如果要以可移植配置文件为目标,它没有预定义的名字对象,因此可移植配置文件也无法推断TargetFrameworkIdentifierTargetFrameworkVersionTargetFrameworkProfile。编译器常量也不是自动定义的。最后,您必须添加所有程序集引用,默认情况下不提供任何程序集引用。

下面的示例取自一个项目,该项目使用了dynamic关键字,因此它还需要microsoft.csharp程序集,因此您可以看到它是如何引用不同的目标的。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard1.5;net40;portable40-net45+sl5+win8+wp8</TargetFrameworks>
  </PropertyGroup>

  <PropertyGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
    <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <TargetFrameworkProfile>Profile158</TargetFrameworkProfile>
    <DefineConstants>$(DefineConstants);PORTABLE158</DefineConstants>
  </PropertyGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='netstandard1.5'">
    <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
    <PackageReference Include="System.ComponentModel" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='net40'">
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)'=='portable40-net45+sl5+win8+wp8'">
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Windows" />
  </ItemGroup>
</Project>
 类似资料:
  • 有没有一种方法可以轻松地将面向.NETCore2.0的类库转换为.NET标准? 如果我理解正确,如果有人想在针对不同.NET框架(例如.NET Framework,.NET Core,Xamarin等)的项目中最大限度地提高类库的可重用性,那么以.NET Standard为目标的更好主意 - 前提是所有必需的API都可以在将要定位的.NET Standard版本中提供。 这就是我想将类库从. NE

  • 我读过关于.NET标准和.NET核心之间的区别,但我真的不知道区别是什么,也不知道什么时候选择.NET标准库项目,什么时候选择.NET核心库项目。

  • 我搞不懂,怎么写一本书。NET核心Web API支持文件上传。请注意,我没有使用ASP。NET核心MVC表单,用于文件上载,但通过Servlet/JSP容器。以下是我的项目是如何完成的。定义了json, 以下是我的创业定义, 最后这里是如何定义我的控制器, 我经历过这个环节,https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-u

  • .NET核心和ASP.NET核心到底有什么区别?

  • 我向我的.NET核心应用程序添加了一个app.config文件,如下所示 现在我在下面发现了一个错误 消息“无法加载在应用程序配置文件中注册得实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer',以固定名称为'System.Data.SqlClient'得ADO.NET提供程序.