1

我正在尝试自动构建一个 ASP.NET Core 应用程序,该应用程序对属于同一项目的 Nuget 包具有两种类型的依赖项:

  1. 作为努力的一部分,对 Nuget 包的直接依赖也正在积极开发中
  2. 在同一解决方案中引用“经典”.NET 程序集项目,这些项目依赖于我们也在开发的 Nuget 包

我想要构建此解决方案以获取最新版本的 Nuget 包,然后“做正确的事”。

让我们从上面的#1开始:

使用dnu install (deprecated) 我可以有效地更新到最新版本的 Nuget 包;但是,这仅当我在与我的 xproj 相同的目录中运行 dnu install 时。为什么?因为有三个位置(但 AFAICT 未命名)参数:包 id版本项目位置- 所以如果我想指定项目位置,我必须输入一个版本,但是如果我想要最新的应该放什么?试过 * 但没有用。

理想情况下,无论如何我都想使用Coreclr dotnet 客户端,但是按照设计,它没有安装选项。

现在案例 #2 我的“经典”装配项目有一个使用nuget update的预构建步骤,它为我们的项目提取最新的 nuget 并适当地构建(这类似于我的案例 #1)。

但是,尽管重建了 ASP.NET 项目,但在我的 ASP.NET Core 应用程序中对这些项目的引用似乎并未更新。在解决方案资源管理器中,依赖 nuget 的版本保持在我手动添加它们作为参考时的版本。我发现修复的唯一方法——即使只是在 Visual Studio 中工作——是删除引用然后重新添加它们(好像“包装”机制不会自动启动)。

所有这一切让我觉得完全自动化这个构建是不可能的——希望我错了:)

修改为在下面包含更多详细信息

下面是 Visual Studio 中显示的项目结构,它完全正确构建。

在此处输入图像描述

这是 global.json:

{
   "projects": [
      "src",
      "test",
      "wrap"
   ],
   "sdk": {
    "version": "1.0.0-rc1-update1"
   }
}

这是 API 项目的完整 project.json:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Lnl.Saas.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.TraceSource": "1.0.0-rc1-final"
  },
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },
  "frameworks": {
    "dnx452": {
      "dependencies": {
        "Account.Model": "1.0.0-*",
        "Account.Service": "1.0.0-*"
      }
    }
  },
  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

现在我重建创建上述解决方案中引用的 Nuget 包的项目(未显示)。

然后我希望能够重建上面的帐户解决方案以引入更新的 Nugets

  1. 最新版 Lnl.Saas.Diagnostics 直接进入 API 项目
  2. 将另外两个 Nugets 添加到 Service 项目中(这通过 nuget install post-build 工作),然后更新 API 项目中对 Service 的引用,以便它引用 NEW nugets。

请注意下面的诊断 Nuget 参考没有改变(服务中的也没有改变,但我忘了在第一个屏幕截图上展开它)

在此处输入图像描述

如果我查看 Nuget 包管理器 UI,它会知道有更新,如果我使用 UI,它们就会被应用。

如果我在包管理器控制台中运行dnu restore,它会列出新包但(重新?)安装以前的包 - 在 project.lock.json 中明确命名。

通过尝试拼凑文档,我得到的印象dnu restore在这里做的是“正确”的事情,我需要使用dnu install,如果我在与 project.json 文件相同的目录中运行它,它确实有效(但如果我尝试从另一个目录运行,我的自动化脚本所在的位置,我不能/不知道在版本(第二个)参数中放什么,现在需要它,因为我提供了一个项目位置(第三个)参数) .

http://docs.asp.net/en/latest/dnx上的文档非常缺乏,当关注一些链接时,我找到了具有更好文档的dotnet.github.io项目(但没有明显提及它适用于 rc2)。

最后,也许这提供了一些额外的线索,是在构建时我收到一个警告(这似乎不会在运行时引起问题),例如:

警告 MSB3274 无法解析主要引用“C:...\Account\Service\bin\Debug\Account.Service.dll”,因为它是针对“.NETFramework,Version=v4.5.2”框架构建的。这是比当前目标框架“.NETFramework,Version=v4.5.1”更高的版本。

但不知道如何解决,因为我不知道我在哪里/如何使用 API 项目定位 4.5.1 框架。

4

0 回答 0