ASP.NET网站在本地构建,但在构建服务器上抛出MSB3268

时间:2018-01-05 17:14:35

标签: c# asp.net .net msbuild

我在我的网站解决方案中添加了一个项目。在本地和构建服务器上构建的所有内容都很好。

我在网页代码中添加了一行来调用新项目中的方法。所有内容都在本地构建和运行良好,但它破坏了构建服务器上的构建。

我遇到了一堆错误:

  

警告MSB3268:无法解析主要引用“C:... \ ProjectName.dll”,因为它对框架程序集“Assembly.Name(例如System.Runtime)”,Version = 4.0具有间接依赖性。 0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“无法在当前目标框架中解析。”.NETFramework,Version = v4.5“。要解决此问题,请删除引用”C:... \ ProjectName。 dll“或将您的应用程序重新定位到包含”System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“的框架版本。

在所有警告之后,构建失败并显示错误,指示无法找到名称空间ProjectName。考虑到项目的依赖关系无法解决,这是有道理的。

起初我想知道是否存在针对错误框架的问题。但4.5网站引用了4.0和4.5项目。这是第一个失败的。

这个和其他项目的唯一区别是它引用了第三方DLL。显然,他们的依赖是无法解决的。

1 个答案:

答案 0 :(得分:1)

这篇文章持有关键字:http://devsilos.blogspot.com/2014/10/msb3268-while-targeting-aspnet-web-site.html

作者建议:

  

aspnet_compiler由于某种原因没有考虑驻留在4.5程序集的Facade目录下的.dll-s(C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facades )。   它看起来只有   C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5

我对这个想法的推断是,如果它们被第三方DLL引用而不是直接从你的项目引用,那么编译器可能没有考虑Facades目录中的DDL。 / p>

正如作者所建议的那样,解决方案是找到MSB3268警告中提到的匹配程序集的DLL,并将它们从Facades复制到其父目录。

我认为我的问题/解决方案与博客的不同之处在于它与目标.NET Framework版本无关。它只与构建服务器的编译器是否在适当的位置查找以解决第三方DLL的依赖关系有关。

这个问题引起了十个小时的挫折。我希望这有助于其他人避免这种情况!