【问题标题】:ASP.NET 5 (vNext) web project: library conflict upgrading from beta4 to beta6ASP.NET 5 (vNext) web 项目:库冲突从 beta4 升级到 beta6
【发布时间】:2015-06-26 20:11:50
【问题描述】:

我用dnvm upgrade -Unstable 升级了 DNVM。运行 dnvm list 表明它处于活动状态:1.0.0-beta6-12120。

我使用 ASP.NET 5 Preview Template for Web Site 创建了一个新项目,并验证它可以构建。

我将 project.json 更改为引用 beta6:

"dependencies": {
  "EntityFramework.SqlServer": "7.0.0-beta6",
  "EntityFramework.Commands": "7.0.0-beta6",
  "Microsoft.AspNet.Mvc": "6.0.0-beta6",
  "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta6",
  "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta6",
  "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta6",
  "Microsoft.AspNet.Authentication.Google": "1.0.0-beta6",
  "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta6",
  "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta6",
  "Microsoft.AspNet.Diagnostics": "1.0.0-beta6",
  "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta6",
  "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta6",
  "Microsoft.AspNet.Server.IIS": "1.0.0-beta6",
  "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6",
  "Microsoft.AspNet.StaticFiles": "1.0.0-beta6",
  "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta6",
  "Microsoft.Framework.Configuration.Json": "1.0.0-beta6",
  "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta6",
  "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta6",
  "Microsoft.Framework.Logging": "1.0.0-beta6",
  "Microsoft.Framework.Logging.Console": "1.0.0-beta6"
}

但是由于运行时库冲突构建失败:

1>MSBUILD : DNX 4.5.1 error CS0433: The type 'AssemblyFileVersionAttribute' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 1>MSBUILD : DNX 4.5.1 error CS0433: The type 'AssemblyVersionAttribute' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 1>MSBUILD : DNX 4.5.1 error CS0433: The type 'AssemblyInformationalVersionAttribute' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.String' is not defined or imported 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.String' is not defined or imported 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.String' is not defined or imported 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.Void' is not defined or imported 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.Void' is not defined or imported 1>MSBUILD : DNX 4.5.1 error CS0518: Predefined type 'System.Boolean' is not defined or imported

如何解决?

【问题讨论】:

    标签: c# asp.net asp.net-core


    【解决方案1】:

    beta6-*

    在您的 project.json 文件中,尝试使用 beta6-* 而不是仅使用 beta6。这意味着它将引用它的最新版本。

    ~.dnx\运行时

    检查 C:\Users\MyUser\.dnx\runtimes 中的运行时目录。我的包括以下内容:

    dnx-clr-win-x86.1.0.0-beta6          <-- I made this one via a rename.
    dnx-clr-win-x86.1.0.0-beta6-12085
    dnx-clr-win-x86.1.0.0-beta6-12120
    

    在与*.sln 位于同一目录中的global.json 文件中,我确保引用如下运行时之一:

    {
        "projects": [ "src", "test" ],
        "sdk": {
            "version": "1.0.0-beta6-12120"
        }
    }
    

    【讨论】:

    • 我要补充的一点是,BCL 在版本控制中不再统一,因此包可以有不同的版本。此外,许多以前被视为 BCL 一部分的软件包现在在技术上不在 BCL 中(即 microsoft.asp.net.*)。对于问题中的某些软件包,甚至 beta6-* 也是无效的,因为最新版本是 beta5-something。
    • 仅使用beta6 而不是beta6-* 包还原降低了beta6 中最旧的版本。更改为beta6-* 导致最新版本下线,库冲突消失。
    • 要浮动的话最好去掉sdk版本
    • @davidfowl 你的意思是global.json 应该包含{ "projects": [ "src", "test" ] } 而不列出特定的sdk
    • 是的,这个例子是正确的。如果你 dnvm upgrade foo,它会为升级后的版本设置一个别名 foo。如果你设置一个别名,你总是更新,那么你永远不必触摸 global.json
    【解决方案2】:

    如果从命令行构建:

    从命令行执行dnu restore。这将强制更新依赖解析。几乎任何时候您更改运行时,无论是升级到新的还是切换活动的运行时,我都会进行恢复。

    如果从 Visual Studio 构建:

    Visual Studio 使用 sdk 属性来确定在构建和恢复时使用哪个运行时。这可能与 dnvm 激活的运行时集不同。在 dnvm 中设置活动运行时不会更改 IDE 使用的运行时。在 VS 中设置目标不会更改命令行上的活动运行时。

    要更改 Visual Studio 使用的运行时:

    为整个解决方案设置最低 dnx 版本。

    手动编辑 global.json(解决方案级别文件)。将“sdk”的值设置或更改为所需的运行时版本。这会为所有项目设置默认值,并且可以在下面的项目级别覆盖它。

    为项目设置所需的运行时

    右键单击项目>属性>应用程序

    检查Use specific DNX version。 设置为所需的版本、平台和架构

    【讨论】:

    • 刚才在 cmdln 上运行了它。这似乎与项目上下文菜单上的“恢复包”相同。所有的参考资料看起来都很开心。它只是在构建时失败。
    • 在命令行上构建(dnu build)也失败了?我更新了答案以表明 Visual Studio 使用的方式与 dnvm 设置目标的方式不同。
    • 是的,在命令行中使用dnu build 也会失败。 cmdln 和 VS 都在使用 sdk 1.0.0-beta6-12120。
    • 仔细查看您的代码我不确定如何从命令行或 IDE 进行还原。我不相信 beta6(没有内部版本号)是这些软件包的有效版本。我试图复制这个问题,但我无法找到包错误,所以我很惊讶你能够进行恢复。例如,“Microsoft.AspNet.Server.WebListener”有一个 beta6-10361,但没有 beta6。
    • "我无法找到包错误" ...如果我得到这些错误会很棒。但它取而代之的是最旧的 beta6 版本,而不是最新版本。但是谢谢你的回答。它提供了在没有足够信息时使用这些工具的好信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2015-10-12
    • 2022-11-10
    • 2013-08-31
    • 1970-01-01
    • 2018-06-02
    相关资源
    最近更新 更多