如何使nuget包正确地定位多个框架?

时间:2016-02-08 19:47:25

标签: c# .net nuget class-library dnx

目前,我收到以下错误:

Could not install package 'csharp-extensions 1.2.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.          

以下是我的回购的链接:https://github.com/NullVoxPopuli/csharp-extensions
Nuget链接:https://www.nuget.org/packages/csharp-extensions/1.2.0

在我的project.json中,我指定了dnx46和dnxcore50

{
    "version": "1.2.0",
    "configurations": {
        "Debug": {
            "compilationOptions": {
                "define": [ "DEBUG", "TRACE" ]
            }
        },
        "Release": {
            "compilationOptions": {
                "define": [ "RELEASE", "TRACE" ],
                "optimize": true
            }
        }
    },
    "dependencies": {
        "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
        "System.Reflection": "4.1.0-*",
        "xunit": "2.1.0-*",
        "xunit.runner.dnx": "2.1.0-*"
    },
    "commands": {
        "run": "csharp_extensions",
        "test": "xunit.runner.dnx"
    },
    "frameworks": {
        "dnx46": {
            "dependencies": {
                "System.Console": "4.0.0-beta-*",
                "System.Reflection.TypeExtensions": "4.1.0-beta-*",
                "System.Runtime.Extensions": "4.0.11-beta-*",
                "System.Dynamic.Runtime": "4.0.11-beta-*",
                "Microsoft.CSharp": "4.0.1-beta-*",
                "System.IO": "4.0.11-beta-*"
            }
        },
        "dnxcore50": {
            "_": "this is the recommended windows runtime",
            "dependencies": {
                "System.Console": "4.0.0-beta-*",
                "System.Reflection.TypeExtensions": "4.1.0-beta-*",
                "System.Runtime.Extensions": "(4.0,]",
                "System.Dynamic.Runtime": "(4.0.0,]",
                "Microsoft.CSharp": "(4.0.0,]",
                "System.IO": "(4.0,]"
            }
        }
    },
}

我正在尝试安装nuget的项目是一个面向.NET Framework 4.6的类库(并不是一个dnx项目)

更新:

当我使用nuget pack构建nuget包时会发生这种情况 enter image description here

2 个答案:

答案 0 :(得分:0)

查看你的csharp-extensions NuGet包它看起来不正确。它有您的项目文件,没有程序集。

我认为这是通过运行NuGet.exe package package.nuspec生成的。这不会生成可以从NuGet.org使用的NuGet包,因为没有程序集。

如果您在Visual Studio中构建.xproj,如果您在项目选项中选中Product outputs on build,则会在artifacts目录中为您生成.nupkg。不幸的是,这个.nupkg文件虽然有程序集,但只有一个lib \ dnxcore50目录,而NuGet不允许你将它安装到.NET 4.6项目中,因为NuGet发现它们不兼容。使用artifacts目录中的.nupkg文件会返回相同的错误。您似乎只能将此工件.nupkg安装到DNX项目(控制台或Web应用程序)中,而不是DNX类库项目。

我将看看现有的NuGet包并尝试生成相同的结构。例如,查看System.Xml.XmlDocument具有新的NuGet 3样式目录结构:

\lib
    \dotnet
    \net46
\ref
    \dotnet
    \net46

只有上面的目录中包含System.Xml.XmlDocument.dll。

NuGet 2只有lib目录,不支持dotnet作为目录。

答案 1 :(得分:0)

这是最终允许此nuget与非dnx项目一起使用的project.json配置:

https://github.com/NullVoxPopuli/csharp-extensions/blob/2767e8ae87dcc69a14d1a33fd63b9eef364ee1ec/project.json

关键部分是(在框架下)

 "net46": {
            "frameworkAssemblies": {
                "System.Runtime": {
                    "type": "build",
                    "version": ""
                }
            },
            "dependencies": {
                "Microsoft.CSharp": "4.0.1-beta-*",
                "System.Dynamic.Runtime": "4.0.11-beta-*",
                "System.IO": "4.0.11-beta-*",
                "System.Reflection.TypeExtensions": "4.1.0-beta-*",
                "System.Runtime.Extensions": "4.0.11-beta-*",
            }

        },

使用xunit的通用测试运行器:

"dependencies": {
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*",
    "System.Reflection": "4.1.0-*",
    "xunit": "2.1.0-*",
    "xunit.runners": "2.0.0",
},