2011-05-03 284 views
27

我得到一堆错误我生成服务器上:.NET 4.0构建服务器参考组件警告MSB3644

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common。目标(847,9):警告MSB3644:找不到框架“.NETFramework,Version = v4.0”的引用程序集。要解决此问题,请为此框架版本安装SDK或Targeting Pack,或将您的应用程序重定向到您安装了SDK或Targeting Pack的框架版本。请注意,程序集将从全局程序集缓存(GAC)中解析出来,并将用于代替引用程序集。因此,您的程序集可能无法正确定位您想要的框架。 [d:\ ADIS \汞\ AdisFeeds \缓存\ Adis.Feeds.Cache.ConsoleManager \ Adis.Feeds.Cache.ConsoleManager.csproj]

的问题是,我已经安装的所述.NET份Windows SDK 7.1。 ...我特别小心地检查.net 4.0参考程序集旁边的框。

有没有人有什么建议,哪里出问题了?

对于记录,我正在使用Nant为msbuild nant任务运行构建脚本(ver 0.86)和nant.contrib(0.85)。

更新 我刚刚跑过那个角度。我使用带有诊断日志记录的msbuild在我的开发机器上编译解决方案,然后再次在构建服务器上编译。然后我比较了日志。

似乎有重大差异,缺少对\ Program Files \ References Assemblies路径的任何引用。特别是在FrameworkPathOverride中。

所以我试着将FrameworkPathOverride作为命令行参数添加到msbuild。不幸的是,这引起了我不幸的发现,即引用程序集目录似乎只有它们中的xml文件。因为在那里只有mscorlib.xml。否mscorlib.dll

这是怎么回事?!?

+1

那么,他们在场吗? C:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0。注意64位操作系统的麻烦,他们也有c:\ program files(x86) – 2011-05-04 00:33:12

+0

我只是在这个角度。我使用带有诊断日志记录的msbuild在我的开发机器上编译解决方案,然后再次在构建服务器上编译。然后我比较了日志。 – Jero 2011-05-04 04:46:18

+0

[CI服务器上.NET 4.0生成问题]的可能重复(http://stackoverflow.com/questions/2730765/net-4-0-build-issues-on-ci-server) – 2014-03-14 11:50:50

回答

27

好吧,我找到了一个解决方案。您需要做两件事:

  1. 首先添加FrameworkPathOverride作为命令行参数并将其指向引用程序集目录。

喜欢的东西

msbuild -p:FrameworkPathOverride="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 
  • 你需要做的是找到一个完整版本的引用程序集目录的第二件事。由于Windows SDK安装的副本和Visual Studio安装的副本,我只是从我的开发机器上复制了我的副本。工作正常。
  • 最后一个注意事项:这可能发生在我身上的原因首先是我们的构建服务器是一个很好的旧的Windows Server 2003之一。太旧的Windows SDK安装来应付?

    +0

    您可能刚刚保存了一天... – 2012-09-07 08:47:13

    +0

    ...是的,你做到了!谢谢。有一台Server 2008 R1机器,它不会让我安装Win 8 SDK或Visual Studio 2012 – 2012-09-07 08:51:41

    +1

    如果在WS 2008 R2中运行的.NET 4.5 Build有相同的问题。遵循您的意见并努力工作!唯一不需要的是添加命令行参数。所以只需使用引用程序集创建4.5文件夹就可以为我工作。非常感谢! – kzfabi 2012-11-20 14:03:54

    10

    这看起来像这个问题的一个重复:.NET 4.0 build issues on CI server在任何情况下都应按照规定的方式解决。

    确保Windows 7 SDK安装(至少).NET开发“智能感知和参考程序集”和“工具”。如果他们说他们已经安装,但引用程序集不存在于您的磁盘上,请卸载并重新安装。我已经在我的构建服务器上确认了修复程序。

    +1

    使用Web安装程序从这里http://www.microsoft。 com/en-us/download/confirmation.aspx?id = 8279以避免整个SDK的下载。 – Oliver 2014-03-13 22:23:08

    2

    为了增加cixelsyd的回答是:

    在Windows SDK v7.1的安装程序中的默认设置是“IntelliSense和引用程序集”是“半检查” - 这充分检查变化和警告都不见了:-)

    0

    后,参照组件淘答案的网页,通过项目广泛寻找配置文件的天上面提到的,使用Windows 8.1 SDK t的上述建议o重新安装一个缺失的4.5.1引用程序集,最终做到了这一点。

    在我的情况,我正试图“不开始调试”一个新的ASP.Net核心的Web应用程序(.NET核心)创建跟随tutorial在:https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html

    使用SDK时,我未选中一切接受参考组件。这是我发现安装4.5.1的唯一方法,因为其他方法会因为我已安装4.5.2及更高版本而失败。

    这个页面的荣誉终于奏效了!

    警告MSB3644:未找到框架 “.NETFramework,Version = v4.5.1”的参考程序集。要解决此问题,请为此框架版本安装 SDK或定位套件,或将您的 应用重定向到您安装了SDK 或定位套件的框架版本。

    1

    这个工作对我来说,在PowerShell中运行(不使用FrameworkPathOverride):

    cp -r "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\" "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 
    

    这是因为4.5(或4.5.1)是一个下拉更换为4.0

    +1

    你甚至可以使用'mklink'创建一个sym链接而不是复制 – Ivan 2017-12-21 20:19:06