在Visual Studio团队服务托管构建代理上的.net v5.4项目中构建dapper时出错

时间:2021-04-21 03:36:11

I recently set up a very basic .net web project and used dapper in my repository to access a database. It works and builds with no errors on my local computer, but when i attempt to build on VSTS, i get an error saying that certain packages are not compatible with .net framework v5.4 or v5.0 (tried a few different frameworks in an attempt to get it to build.)

我最近建立了一个非常基本的.net web项目,并在我的存储库中使用dapper来访问数据库。它在我的本地计算机上工作和构建没有错误,但是当我尝试在VSTS上构建时,我得到一个错误,说某些软件包与.net framework v5.4或v5.0不兼容(尝试了几个不同的框架)试图让它建立起来。)

Here's the project.json file in question that contains dapper. This builds and restores without any issues locally on my computer:

这是包含dapper的project.json文件。这在我的计算机上本地构建和恢复没有任何问题:

      {
    "version": "1.0.0-*",
    "description": "ProjectPOC.Core.Implementations Class Library",
    "authors": [ "CBergeron" ],
    "tags": [ "" ],
    "projectUrl": "",
    "licenseUrl": "",
    "dependencies": {
      "ProjectPOC.Core.Infrastructure": "",
      "ProjectPOC.Core.Models": "",
      "Microsoft.Extensions.OptionsModel": "1.0.0-rc1-final",
      "Dapper": "1.50.0-beta9"
    },
    "frameworks": {
      "net451": {
        "dependencies": {

        }
      },
      "dotnet5.4": {
        "dependencies": {
          "Microsoft.CSharp": "4.0.1-beta-23516",
          "System.Collections": "4.0.11-beta-23516",
          "System.Linq": "4.0.1-beta-23516",
          "System.Runtime": "4.0.21-beta-23516",
          "System.Threading": "4.0.11-beta-23516"
        }
      }
    }
  }

When This project is built on the VSTS hosted build agent, i'm running the preinstall.ps1 script that's commonly being used here:

当此项目构建在VSTS托管构建代理上时,我正在运行通常在此处使用的preinstall.ps1脚本:

# bootstrap DNVM into this session.
  "bootstrapping dnvminstall..."
  &{$Branch='dev';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1'))}
   "finished bootstrapping"

   "Loading global.json"
  # load up the global.json so we can find the DNX version
  $globalJson = Get-Content -Path $PSScriptRoot\global.json -Raw -ErrorAction Ignore | ConvertFrom-Json -ErrorAction Ignore
  "finished loading global.json"  


  if($globalJson)
  {

      $dnxVersion = $globalJson.sdk.version
    "setting DNX version.. to $dnxVersion "
  }
  else
  {
      Write-Warning "Unable to locate global.json to determine using 'latest'"
      $dnxVersion = "latest"
  }

  # install DNX
  # only installs the default (x86, clr) runtime of the framework.
  # If you need additional architectures or runtimes you should add additional calls
  # ex: & $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -r coreclr
  "installing DNX"
  & $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -Persistent
  #& $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -r clr
  #& $env:USERPROFILE\.dnx\bin\dnvm install $dnxVersion -r coreclr
  #& $env:USERPROFILE\.dnx\bin\dnvm use $dnxVersion
  & $env:USERPROFILE\.dnx\bin\dnvm list
    "finished DNX install  "


    "DNU restoring....."
   # run DNU restore on all project.json files in the src folder including 2>1 to redirect stderr to stdout for badly behaved tools
  Get-ChildItem -Path $PSScriptRoot\src -Filter project.json -Recurse | ForEach-Object { & dnu restore $_.FullName 2>1 }

  #dnu restore
  "finsihed DNU restore"  

This script is installing the following dnx based on the build logs, which matches my dnvm listing on my local machine:

此脚本基于构建日志安装以下dnx,该日志与我本地计算机上的dnvm列表匹配:

2016-05-19T03:45:19.1014995Z installing DNX
    2016-05-19T03:45:19.9042850Z Downloading dnx-clr-win-x86.1.0.0-rc1-update2 from https://www.nuget.org/api/v2
    2016-05-19T03:45:22.7176602Z Installing to C:\Users\buildguest\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update2
    2016-05-19T03:45:22.7766619Z Adding C:\Users\buildguest\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update2\bin to process PATH
    2016-05-19T03:45:22.8456619Z Adding C:\Users\buildguest\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update2\bin to user PATH
    2016-05-19T03:45:22.8826599Z Native image generation (ngen) is skipped. Include -Ngen switch to turn on native image generation to improve application startup time.
    2016-05-19T03:45:23.0276682Z Active Version           Runtime Architecture OperatingSystem Alias
    2016-05-19T03:45:23.0346603Z ------ -------           ------- ------------ --------------- -----
    2016-05-19T03:45:23.0356615Z   *    1.0.0-rc1-update2 clr     x86          win                  
    2016-05-19T03:45:23.0586614Z finished DNX install  
    2016-05-19T03:45:23.0596622Z DNU restoring.....
    2016-05-19T03:45:23.2796607Z Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16609
    2016-05-19T03:45:23.4785866Z   GET https://api.nuget.org/v3/index.json
    2016-05-19T03:45:23.5821917Z   OK https://api.nuget.org/v3/index.json 123ms
    2016-05-19T03:45:23.6261910Z   GET https://www.myget.org/F/aspnetvnext/api/v2/
    2016-05-19T03:45:24.4737562Z   OK https://www.myget.org/F/aspnetvnext/api/v2/ 847ms
    2016-05-19T03:45:24.4787560Z   GET https://www.myget.org/F/aspnetmaster/
    2016-05-19T03:45:25.1793928Z   OK https://www.myget.org/F/aspnetmaster/ 700ms

After it finishes the restore from nuget, during the build it throws errors like this for the package library with dapper in it and anything that references it:

在从nuget完成恢复之后,在构建期间,它会为包含dapper的包库以及引用它的任何内容抛出这样的错误:

       Unable to resolve dependency System.Collections.NonGeneric 4.0.1-rc2-24027
 ...
 2016-05-19T03:47:01.3562201Z ##[error]Platform\POC\ProjectPOC.Web.API\src\ProjectPOC.Core.Implementations\project.json(0,0): Error NU1002: The dependency System.Collections.NonGeneric 4.0.1-rc2-24027 in project ProjectPOC.Core.Implementations does not support framework .NETPlatform,Version=v5.4.
 2016-05-19T03:47:01.3602187Z      5>C:\a\1\s\Platform\POC\ProjectPOC.Web.API\src\ProjectPOC.Core.Implementations\project.json : error NU1002: The dependency System.Collections.NonGeneric 4.0.1-rc2-24027 in project ProjectPOC.Core.Implementations does not support framework .NETPlatform,Version=v5.4. [C:\a\1\s\Platform\POC\ProjectPOC.Web.API\src\ProjectPOC.Core.Implementations\ProjectPOC.Core.Implementations.xproj]

Again this is building, running, deploying to azure, etc flawlessly from my local machine in VS2015, so i feel like it has something to do with the hosted build agent and it's dnx/dnvm/nuget setup. Is there something that i need to add to the build agent or something i need to do to the dnvm/nuget install to get the correct versions of everything? I also uploaded my nuget.config to the build agent and that also didn't help. I can provide more of the logs on request.

再次,这是在VS2015中从我的本地机器完美地构建,运行,部署到azure等,所以我觉得它与托管构建代理有关,它是dnx / dnvm / nuget设置。有什么东西我需要添加到构建代理或我需要做什么到dnvm / nuget安装以获得所有的正确版本?我还将我的nuget.config上传到构建代理,但也没有帮助。我可以根据要求提供更多日志。

my local dnvm list looks like this:

我的本地dnvm列表如下所示:

  Active Version           Runtime Architecture OperatingSystem Alias
  ------ -------           ------- ------------ --------------- -----
         1.0.0-beta8       clr     x64          win
         1.0.0-beta8       coreclr x64          win
         1.0.0-beta8       coreclr x86          win
         1.0.0-rc1-update1 clr     x64          win
         1.0.0-rc1-update1 clr     x86          win
         1.0.0-rc1-update1 coreclr x64          win
         1.0.0-rc1-update1 coreclr x86          win
    *    1.0.0-rc1-update2 clr     x86          win             default

Thanks in advance if anyone can provide any help with this or has run into a similar issue before with the new .net stuff

如果有人可以提供任何帮助,或者在使用新的.net之前遇到类似的问题,请提前致谢

1 个解决方案

#1


1  

I met this issue before and it did not work on my local machine. And I get it work by use the "1.50.0-beta8" version for Dapper instead of "1.50.0-beta9". beta8 use older dependencies then beta9.

我之前遇到过这个问题,它在我的本地机器上无效。我通过使用Dapper的“1.50.0-beta8”版本而不是“1.50.0-beta9”来实现它。 beta8使用较旧的依赖项然后beta9。

This issue seems to be caused by the change here: Rename "dotnet" to "NETStandard" but I haven't got time to figure it out.

这个问题似乎是由这里的变化引起的:将“dotnet”重命名为“NETStandard”,但我没有时间弄明白。

#1


1  

I met this issue before and it did not work on my local machine. And I get it work by use the "1.50.0-beta8" version for Dapper instead of "1.50.0-beta9". beta8 use older dependencies then beta9.

我之前遇到过这个问题,它在我的本地机器上无效。我通过使用Dapper的“1.50.0-beta8”版本而不是“1.50.0-beta9”来实现它。 beta8使用较旧的依赖项然后beta9。

This issue seems to be caused by the change here: Rename "dotnet" to "NETStandard" but I haven't got time to figure it out.

这个问题似乎是由这里的变化引起的:将“dotnet”重命名为“NETStandard”,但我没有时间弄明白。