相关疑难解决方法(0)

运行MSBuild无法读取SDKToolsPath

你好,我在运行一个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也没有任何用处.知道这可能是什么吗?

斯科特

.net msbuild

128
推荐指数
8
解决办法
11万
查看次数

为什么Visual Studio 2013对lc.exe使用了错误的SdkToolsPath?

我正在使用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)

msbuild visual-studio visual-studio-2013

6
推荐指数
1
解决办法
2万
查看次数

TFS 2010为.Net 3.5应用程序创建.Net 4.0 XmlSerializers DLL

我们有一个在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程序集?

.net msbuild team-build visual-studio-2010

5
推荐指数
1
解决办法
2990
查看次数