Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MsBuild在Visual Studio Online上找不到还原的NuGet包_C#_Msbuild_Nuget_Azure Devops - Fatal编程技术网

C# MsBuild在Visual Studio Online上找不到还原的NuGet包

C# MsBuild在Visual Studio Online上找不到还原的NuGet包,c#,msbuild,nuget,azure-devops,C#,Msbuild,Nuget,Azure Devops,我尝试在VisualStudioOnline上构建一个存储在外部GIT存储库中的解决方案 它有以下步骤: 1:Git还原-工作 2:NuGet还原-工作 3:构建-不起作用 查看日志时,我的第一个猜测是MsBuild没有查找NuGet存储它们的包。 NuGet Restore中的一些行: 2018-03-14T21:10:11.0352862Z Completed installation of AngleSharp 0.9.9 2018-03-14T21:10:11.0353230Z Addi

我尝试在VisualStudioOnline上构建一个存储在外部GIT存储库中的解决方案

它有以下步骤:

1:Git还原-工作

2:NuGet还原-工作

3:构建-不起作用

查看日志时,我的第一个猜测是MsBuild没有查找NuGet存储它们的包。 NuGet Restore中的一些行:

2018-03-14T21:10:11.0352862Z Completed installation of AngleSharp 0.9.9
2018-03-14T21:10:11.0353230Z Adding package 'AngleSharp.0.9.9' to folder 'D:\a\1\s\packages'
2018-03-14T21:10:11.0353563Z Added package 'AngleSharp.0.9.9' to folder 'D:\a\1\s\packages'
2018-03-14T21:10:11.0354972Z Added package 'AngleSharp.0.9.9' to folder 'D:\a\1\s\packages' from source 'https://api.nuget.org/v3/index.json' 'Microsoft.SharePointOnline.CSOM.16.1.7317.1200' to folder 'D:\a\1\s\packages' 
MsBuild中的某些行:

018-03-14T21:10:21.2105399Z PrepareForBuild:
2018-03-14T21:10:21.2105793Z   Creating directory "bin\Release\".
2018-03-14T21:10:21.2424947Z   Creating directory "obj\Release\".
2018-03-14T21:10:30.3569560Z ResolveAssemblyReferences:
2018-03-14T21:10:30.3570425Z   Primary reference "AngleSharp, Version=0.9.9.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL".
2018-03-14T21:10:30.3670272Z ##[warning]C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2041,5): Warning MSB3245: Could not resolve this reference. Could not locate the assembly "AngleSharp, Version=0.9.9.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
我的解决方案/包结构是:

....\mysolution\myproject\myproject.csproj
....\mysolution\myproject\packages.config
当前配置: 因此,如何更改Nuget和/或msbuild行为以使其正常工作

(更新):为了澄清这一点:我对每个包都有这个问题。它们都在packages.config中,每个都是从Nuget下载的,但在MsBuild中也找不到

(Update2)当前生成的命令如下: 努吉:

MSBUILD:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe" "D:\a\1\s\AweCsomeO365\AweCsomeO365.csproj" /nologo /nr:false /dl:CentralLogger,"D:\a\_tasks\VSBuild_(GUID)\1.126.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll";"RootDetailId=(GUID)|SolutionDir=D:\a\1\s\AweCsomeO365"*ForwardingLogger,"D:\a\_tasks\VSBuild_(GUID)\1.126.0\ps_modules\MSBuildHelpers\Microsoft.TeamFoundation.DistributedTask.MSBuild.Logger.dll" /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=D:\a\1\a /p:ReferencePath=D:\a\1\a\packages /p:platform="anyCPU" /p:configuration="Release" /p:VisualStudioVersion="15.0" /p:_MSDeployUserAgent="VSTS_(GUID)_build_4_22
我替换了guid;tempNuGetConfig似乎是由VST动态生成的

还是。即使日志声明nuget存储包

Added package 'AngleSharp.0.9.9' to folder 'D:\a\1\a\packages'
MsBuild似乎没有在那里找到它们:

 For SearchPath "D:\a\1\a\packages".
2018-03-16T13:57:42.4625155Z           Considered "D:\a\1\a\packages\AngleSharp.winmd", but it didn't exist.
2018-03-16T13:57:42.4625456Z           Considered "D:\a\1\a\packages\AngleSharp.dll", but it didn't exist.
2018-03-16T13:57:42.4625730Z           Considered "D:\a\1\a\packages\AngleSharp.exe", but it didn't exist.
VSTS配置值:

MsBuild:
/p:ReferencePath=$(Build.StagingDirectory)\packages

Nuget DestinationDirectory:
$(Build.StagingDirectory)\packages


(更新3):我没有解决方案文件,但该存储库中只有一个csproj文件。我认为您的MSBuild“ReferencePath”参数不正确。您正在告诉MS Build,您的所有引用(包括nuget软件包及其DLL)都将位于“D:\a\1\a\packages”,但nuget不会在那里下载和存储软件包和DLL。Nuget将下载文件并将其解压缩到D:\a\1\a\packages\{packageName}\{version}\lib\{environment}\package.dll中。我认为您需要从MSBuild参数中删除最后一个参数(ReferencePath)


我还注意到您的PackageLocation参数与NuGet restore任务的目标不相同,您是否需要将“\packages”添加到该参数中,就像还原任务中的目标一样?

将NuGet restore目标目录更改为$(Build.SourcesDirectory)\打包并删除msbuild ReferencePath参数。

问题在于,在项目内部,有一个用于指向GIT存储库之外位置的包的hintpath(不应该):


..\..\AweCsome365Test\packages\AngleSharp.0.9.9\lib\net45\AngleSharp.dll
我最初的方法是为NuGet定义一个目标目录,为MSBuild定义一个源目录,以使用双方都能理解的包的另一个位置

但问题是(据我所知),NuGet总是创建一个子文件夹结构
“/packages/{PackagesName}/lib/net45/{file}”
,并且在将
“/packages”
设置为源路径时,MSBuild不会递归地查看

以上只是对未来的人遇到同样问题的一种解释

因此,我的解决方案是模拟nuget的本地行为,并更改输出目录以匹配HintPath(即使存储库中没有“AweCsome365Test”)目录:


(我将保留这个问题,因为这个解决方案有点可疑。如果有谁有更好的解决方案,可以在不使用HintPath的情况下链接nuget和msbuild,我很乐意将我的奖金花在它上)

这里的答案基本上是正确的。然而,值得注意的是另一个可能导致这种行为的原因。几年后,我的工具链使用的是Azure DevOps,它与Visual Studio Online基本相同

原因:

  • 从不同的解决方案(交叉回购)引用您的项目,例如用于调试目的
  • 从引用问题项目的外部位置更新该项目中的NuGet引用
这样做的目的是在安装包时使用包的解决方案位置

对于.Net核心/标准项目,使用更新包-重新安装似乎可以解决问题。但是,对于.Net Framework项目,即使可以重建
packages.json
,但
.csproj
中的
节点仍保持原样,并引用Azure永远不会创建的packages文件夹

简单修复:

  • 右键单击本地有问题的解决方案,然后选择“卸载”
  • 右键单击卸载的项目,选择edit.csproj
  • 找到任何看起来像
    。/../OtherRepo/packages
    (使用的斜杠可能不同)的HintPath,并将其更改为
    。/packages
  • 确认解决方案仍然在本地生成
  • 将更改推到Azure,然后交叉手指

  • 这种方法将解决由于从错误的位置合并/更新包而导致的问题,而不需要更改构建管道来欺骗该位置(在五月的情况下,这也不是很好)。

    好的,您是否在NuGet输出中给出了“添加包…AngleSharp…”?您发布的三行中没有一行看起来您的packages.config没有引用
    AngleSharp
    。您能在这里显示
    myproject.csproj
    的内容吗?AngleSharp只是一个例子。我对每个包都有这个问题:Nuget下载,但MSBuild找不到。我认为您应该有一个解决方案文件。尝试添加一个,然后更改构建以引用该解决方案。您似乎对所有内容都使用默认配置,因此无需为nuget restore任务定义所有配置。在向生成添加解决方案后,我将删除它并将原始任务添加回。我添加此参数是因为如果没有它,它将看到一个完全不同的位置(D:\a\1\s)(s而不是a)。因此,删除此参数不起作用。我注意到需要查看其他内容,答案已更新。这会更改NUP
     For SearchPath "D:\a\1\a\packages".
    2018-03-16T13:57:42.4625155Z           Considered "D:\a\1\a\packages\AngleSharp.winmd", but it didn't exist.
    2018-03-16T13:57:42.4625456Z           Considered "D:\a\1\a\packages\AngleSharp.dll", but it didn't exist.
    2018-03-16T13:57:42.4625730Z           Considered "D:\a\1\a\packages\AngleSharp.exe", but it didn't exist.
    
      <Reference Include="AngleSharp, Version=0.9.9.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
          <HintPath>..\..\AweCsome365Test\packages\AngleSharp.0.9.9\lib\net45\AngleSharp.dll</HintPath>
        </Reference>