生成服务器中的Gitlab msbuild问题-无法解决此参考。无法找到配件

时间:2019-02-11 08:01:59

标签: .net asp.net-mvc msbuild nuget gitlab

我有在本地系统中绝对可以正常工作的解决方案。但是,当在构建服务器中触发构建时,相同的代码将引发以下错误。您能帮忙吗?

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(1988,5): warning MSB3245: **Could not resolve this reference. Could not locate the assembly "Company.Common.SC.Data, Version=2.5.3.32715, Culture=neutral, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.** [C:\glr\builds\7a6e3c3e\0\Company\Product\Company-sm-mvc\Company.Product.MVC.Models\Company.Product.MVC.Models.csproj]
          For SearchPath "C:\glr\builds\7a6e3c3e\0\Company\Product\Company-sm-mvc\packages\Company.Common.SC.MVC.Library.1.7.0\lib\net45".
          Considered "C:\glr\builds\7a6e3c3e\0\Company\Product\Company-sm-mvc\packages\Company.Common.SC.MVC.Library.1.7.0\lib\net45\Company.Common.SC.Data.winmd", but it didn't exist.
          Considered "C:\glr\builds\7a6e3c3e\0\Company\Product\Company-sm-mvc\packages\Company.Common.SC.MVC.Library.1.7.0\lib\net45\Company.Common.SC.Data.dll", but it didn't exist.
          Considered "C:\glr\builds\7a6e3c3e\0\Company\Product\Company-sm-mvc\packages\Company.Common.SC.MVC.Library.1.7.0\lib\net45\Company.Common.SC.Data.exe", but it didn't exist.
          For SearchPath "{HintPathFromItem}".
          Considered "..\packages\Company.Common.SC.Data.2.5.3\lib\net45\Company.Common.SC.Data.dll",
            but its name "Company.Common.SC.Data, Version=2.5.3.23193, Culture=neutral, PublicKeyToken=null"
            didn't match the expected name "Company.Common.SC.Data, Version=2.5.3.32715, Culture=neutral, processorArchitecture=MSIL".

我相信Company.Common.SC.Data nuget库出了点问题。 nuget库是使用nuget软件包管理器创建的,在创建软件包时,我们已经给了版本号2.5.3,但不确定如何添加该子版本。请查看错误的最后一行。

 Considered "..\packages\Company.Common.SC.Data.2.5.3\lib\net45\Company.Common.SC.Data.dll",
            but its name "Company.Common.SC.Data, Version=2.5.3.23193, Culture=neutral, PublicKeyToken=null"
            didn't match the expected name "Company.Common.SC.Data, Version=2.5.3.32715, Culture=neutral, processorArchitecture=MSIL".

更新1:

Nuspec for Company.Common.SC.Data

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Updated for 8.0 and includes additional library code related to Dacron, Terathane and other sites that added to core capabilities.</releaseNotes>
    <copyright>$copyright$</copyright>
    <tags>sitecore data website common</tags>
  </metadata>
</package> 

2 个答案:

答案 0 :(得分:0)

我已找到问题并能够解决。问题是正在使用AssemblyVersion号构建的nuget项目dll。这样的事情。

[assembly: AssemblyVersion("1.7.1.*")]
[assembly: AssemblyFileVersion("1.7.0")]

由于这个原因,当我们通过nuget feed将subversion添加到项目中时,将在项目参考中添加subversion(1.7.1.354567)。

我刚刚删除了*并构建了nuget解决方案,然后创建了 Company.Common.SC.Data 的nuget程序包,然后在我的项目中再次引用了它。有效。

答案 1 :(得分:0)

我们遇到了同样的问题,但是没有使用NuGet(对我们来说不可行)。在我们的案例中,由于项目X引用了DLL Y,而后者又引用了DLL Z(X并不直接引用Z)。我们在所有参考文献中均复制了本地True和特定版本false。我们只是将所有依赖的DLL输出到一个公共的bin文件夹中。

请考虑Z的当前版本为1.1.1.1。 我们构建Y,并将其版本(1.1.1.1)也放入bin文件夹。 我们再次构建Z-它的版本现在是1.1.1.2并复制到bin文件夹中-因此我们具有Y = 1.1.1.1(在构建Z时期望Z的1.1.1.1) 如果现在已构建X,则它将从bin文件夹(1.1.1.2)中获取Y的DLL,但不是Z。

Visual Studio构建可以通过从bin文件夹中获取最新版本的Y和Z来正确处理此问题,而不必关心该版本,因为“特定版本”设置为false。

但是,msbuild抱怨着,因为它似乎忽略了这一点,并期望当前版本的Y期望的特定版本的Z(1.1.1.1)并记录“与期望的名称不匹配”错误。如果我们再次构建Y(以刷新它现在需要Z的1.1.1.2的事实),那么X会包含DLL。