nuget和tfs 2013构建,sharepoint 2013程序包找不到程序集

 2020-08-01 

nuget and tfs 2013 build, sharepoint 2013 package can not find assembly

假设我们具有以下项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
D:\\workspace\\Internet\\Web
Web.sln
 -> Project A
 -> Project B
 -> CommonSharePointProject X
   -> uses and packages Newtonsoft.Json (for example)

D:\\workspace\\Common
CommonLibraries.sln
 -> CommonSharePointProject X
   -> uses and packages Newtonsoft.Json
 -> Common Library Y
 -> Common Library Z

我的问题是,常用的库。
软件包目录将在解决方案的目录下创建。
而且Visual Studio的部署工作正常。
CommonLibrary X在Web \ packages ...文件夹中引用了newtonsoft.json.dll。

但是,TFS Build期望newtonsoft.json.dll位于CommonLibraries \ packages中。
这是为什么?我该如何解决这个问题?

错误如下:
D:\ ws_build \ 1 \ CMP04 \ Buildname \ src \ Common \ SharePoint \ Something \ Main \ CommonSharePointLibrary \ Package \ Package.package:找不到以下文件:" D:\ ws_build \ 1 \ CMP04 \ BuildName \ src \ Common \ SharePoint \ Something \ Main \ packages \ newtonsoft.Json.6.0.1 \ lib \ net45 \ newtonsoft.Json.dll"。

...生成过程将生成D:\ ws_build \ 1 \ CMP04 \ Buildname \ src \ Internet \ Web \ web.sln。
那么,为什么不在Internet \ web \ packages中查找程序集,而不是在common ... \ packages中查找程序集?

SharePoint程序包使用相对路径引用第三者程序集:" .. \ packages \ newtonsoft.Json.6.0.1 \ lib \ net45 \ newtonsoft.Json.dll"。因此,显然,在TFSBuild中,相对路径点与Visual Studio中有所不同。

还要假设我还有另一个解决方案... CommonSharePointProject对Newtonsoft.Json的引用将指向何处?由于该项目用于多个解决方案中,所以我不能在每个解决方案中对不同的package文件夹有不同的引用。只有一个.csproj文件。

1
2
3
4
5
6
D:\\workspace\\Intranet\\OtherWeb
OtherWeb.sln
-> OtherProject A
-> OtherProject B
-> CommonSharePointProject X
  -> uses and packages Newtonsoft.Json


您是否已启用"启用软件包还原"?

如果有的话(在解决方案中右键单击->启用软件包还原)。 然后," nuget软件包还原"将确保下载所有必需的软件包以构建您的解决方案。 这样,您就可以忘记软件包。

您不需要将软件包上载到tfs,实际上,该文件夹应该是空的,仅包含packages.config,因为他将读取此文件以下载所需的软件包。

编辑:
如果您的问题是您有一个解决方案中的项目,已经有他们自己的解决方案,并且遇到了参考错误,请尝试安装此软件包:

NuGetReferenceHintPathRewrite
https://www.nuget.org/packages/NuGetReferenceHintPathRewrite

将其安装在解决方案中的所有项目中。 这将有助于解决参考问题;)或者至少我希望如此