你好,我在运行一个NAnt脚本时会遇到一些问题,这个脚本曾用于正确构建基于.Net 2.0的网站,当使用VS2008及其相关工具进行编译时.我最近将所有项目/解决方案文件升级到VS2010,现在我的构建失败并出现以下错误:
[exec] C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2249,9):错误MSB3086:任务无法使用S dkToolsPath""或注册表找到"sgen.exe"键"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".确保已设置SdkToolsPath,并且该工具位于SdkToolsPath下正确的处理器特定位置,并且已安装Microsoft Windows SDK
现在,我已经在构建服务器上安装了Windows SDK的早期版本(.Net 3.5),并且安装了完整的.Net 4.0框架,但我没有遇到.Net 4.0特定版本的Windows SDK.
经过一些实验和研究,我终于设置了一个新的环境变量"SDKToolsPath"并将其指向我的Windows 6.0 sdk文件夹中的sgen.exe副本.这会产生相同的错误,但它让我注意到即使设置了SDKToolsPath环境变量(确认我可以在命令行"回显"它并且它具有预期的值),错误消息似乎表明它是没有被阅读(注意空引号).
我发现的大多数信息都是特定的.Net 3.5(或更早版本).还没有多少相关的4.0.搜索错误代码MSB3086也没有任何用处.知道这可能是什么吗?
斯科特
我正在使用Visual Studio 2013与asp.net项目.其中一个项目给出了以下错误.为什么它在错误的路径中寻找LC.exe?我的Windows 8.1 SDK已安装,我有一个lc.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
Run Code Online (Sandbox Code Playgroud)
和64位版本,我有一个注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1A
Run Code Online (Sandbox Code Playgroud)
我在看下面的Microsoft.Common.targets C:\Windows\Microsoft.NET\Framework\v4.0.30319,这个键存在:SdkToolsPath="$(TargetFrameworkSDKToolsDirectory)".然后看了下Microsoft.NetFramework.CurrentVersion.props
C:\Program Files (x86)\MSBuild\12.0\Bin
Run Code Online (Sandbox Code Playgroud)
并TargetFrameworkSDKToolsDirectory定义于$SDK40ToolsPath.根据MSBuild /v:diag,
SDK40ToolsPath = C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
Run Code Online (Sandbox Code Playgroud)
看起来不错.该项目在.NET 4.0中的VS目标.
那么为什么它仍然在查看错误的文件夹或注册表项?有趣的是,当我在收到错误消息后重建项目时,项目构建正常.
Error 5
Task could not find "LC.exe" using the SdkToolsPath
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\"
or the registry key
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86".
Make sure the SdkToolsPath is set and the tool exists in the correct processor
specific location under …Run Code Online (Sandbox Code Playgroud) 我们有一个在Visual Studio 2010中运行的ASP.Net Web应用程序,目标是.Net 3.5.它是由TFS 2010构建的.这个Web应用程序有几个Web引用,因此构建会创建一个相关的XmlSerializers DLL.但是,此DLL是.Net 4.0程序集.
当我从构建运行此Web应用程序时,我收到错误:
无法加载文件或程序集"BLAH_BLAH_WEB_APPLICATION_NAME.XmlSerializers"或其中一个依赖项.此程序集由比当前加载的运行时更新的运行时构建,无法加载.
我们正在使用在TFS 2008下工作的msbuild .proj文件(使用构建定义中的"升级模板").我看到了这个问题,而这一个,但使用特定的SGEN生成步骤那些提.我们不是.此外,建议的解决方案涉及硬编码7.0A SGen的路径,这只是......丑陋.
有没有办法强制TFS 2010构建将此XmlSerializers DLL编译为.Net 3.5程序集?