【问题标题】:How to create nuget package (dll) for standard framework and .Net Core?如何为标准框架和 .Net Core 创建 nuget 包(dll)?
【发布时间】:2017-04-19 21:54:48
【问题描述】:

我想为 Sql Server 创建包装标准 Sql Client 类的数据小数据访问库,并将其发布到 NuGet。我想在标准和 .Net 核心应用程序中都使用这个 NuGet 包。

我使用一些数据访问代码(它使用 System、System.Core 和 System.Data)创建了类库项目并将其发布到 nugget。我已将 System、System.Core 和 System.Data 添加为 NuGet 框架依赖项。

UPDATE - described problems both in RC1 and RC2

在 RC1 版本中,它适用于 4.6 框架,但我必须从 package.json 中删除 DNX 5。

在 RC2 版本中,它适用于 ASPNET Core (.Net Framework) 项目,但是当我创建 ASPNET Core (.Net Core) 时,编译失败:

错误 NU1002 依赖项不支持框架 .NETCoreApp,Version=v1.0。

有什么方法可以创建适用于两个版本的 nugget 包?

【问题讨论】:

  • dnx 不再是东西了。你应该转向 RC2 和 netstandard...
  • 你是对的,但这仍然不能解决问题。当我创建 RC2 应用程序时,我在包还原中收到错误:错误 NU1002 依赖项 不支持框架 .NETCoreApp,版本 = v1.0。如果我在带有 .NET 核心类库的新项目中创建块包,我可以解决这个问题,但我需要维护两个项目,一个用于 RC2,另一个用于非核心应用程序。

标签: c# nuget-package asp.net-core-1.0 .net-core-rc2 dnx50


【解决方案1】:

由于.NET Core 1.0这周刚发布,我就结合最新版本的框架来回答这个问题。

如果您尝试同时针对 ASP.NET Core 1.0 和 .NET 4.5,则必须分别定义这两个框架,包括每个框架构建所需的所有依赖项。

这是一个面向 .NET Core Standard 1.5、ASP.NET Core 1.0、.NET 4.5 和 .NET 4.0 并依赖于 System.Linq.Expressions 命名空间的类库项目的示例 project.json 文件:

{
    "version": "1.0.0-*",

    "frameworks": {
        "netstandard1.5": {
            "imports": "dnxcore50",
            "dependencies": {
                "NETStandard.Library": "1.6.0",
                "System.Linq.Expressions": "4.1.0"
            }
        },
        "netcoreapp1.0": {
            "imports": "dnxcore50",
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "type": "platform",
                    "version": "1.0.0"  
                },
                "System.Linq.Expressions": "4.1.0"
            }
        },
        "net45": {
            "frameworkAssemblies": {
                "System.Linq.Expressions": ""
            }
        },
        "net40": {}
    }
}

【讨论】:

  • 谢谢,这解决了我的第一部分问题(为单独的框架构建单独的 dll)。但是我仍然不明白如何将这些 dll 打包到一个单独的 nugget 包中。到目前为止,我已经将一个 dll 部署到 nugget 并且没有在四个子文件夹中有四个版本。如果我只是将它们全部添加到同一个块中,当有人安装它时是否可以解决它?
【解决方案2】:

使用 Visual Studio 2017,您可以创建 .NET Standard 项目库。您可以在项目的属性中选择版本。

这样的项目看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.4</TargetFramework>
    <AssemblyName>MyAssembly</AssemblyName>
    <PackageId>MyPackage</PackageId>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
    <Copyright>Copyright</Copyright>
    <Description>Simple Library</Description>
    <Authors>Me</Authors>
    <AssemblyVersion>1.1.0</AssemblyVersion>
    <FileVersion>1.1.0</FileVersion>
    <Version>1.1.0</Version>
    <Company>MyCompany</Company>
  </PropertyGroup>
  <ItemGroup>
    <Folder Include="Properties\" />
  </ItemGroup>
</Project>

在 IDE 中,您可以在右键菜单中找到 pack 命令,或者您可以键入:

msbuild /t:pack myproject.csproj

只有一个包....来统治他们所有... :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2020-03-05
    相关资源
    最近更新 更多