错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入
Posted
技术标签:
【中文标题】错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入【英文标题】:error MSB4019 - MSBUILD looking for imports for non-existing version 【发布时间】:2017-03-20 12:06:22 【问题描述】:当我尝试使用 MSBUILD 构建我的 SSDT 项目时,我收到以下错误
错误 MSB4019:导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" 没找到
但是,在我的 ...\MSBuild\Microsoft\VisualStudio 文件夹中,我只有 V12.0、V14.0 和 V15.0。 SSDT 仅存在于 V14.0 中。
如何确保 MSBuild 在正确的位置查找包含?
【问题讨论】:
我也有同样的问题。在我的例子中,SSDT 项目的构建与 VS2017 RC 甚至与 3 月 7 日的 VS2017 发布版本(构建 26228.04)一起使用。但是自从 2017 年 3 月 14 日的最后一次 VS2017 更新(内部版本 26228.09)以来,我得到了同样的错误。如果我将 SSDT 项目的 .sln 更改为使用VisualStudioVersion = 15.0.26228.9
我会收到此错误:MSB4132: The tools version "15.0" is unrecognized. Available tools versions are "12.0", "14.0", "2.0", "3.5", "4.0".
我真的希望有人对此有解决方案。 (也许它会在下一次 VS2017 更新中“自动”修复。)
只是一个可能有帮助的附加提示:如果您以编程方式而不是通过命令行使用 MSBuild 类(如 ProjectCollection
),则必须将重定向的程序集版本从 MSBuild 复制到.config
您的应用程序。只需转到C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe.config
并将整个<runtime>
元素复制到您的.config
中。 (并且可能还会更改 Workaround
部分中的文件路径。)这告诉 MSBuild 使用版本 15 而不是旧版本。 (至少这适用于 VS2017 Relase。)
【参考方案1】:
看起来 .Net 4.0 msbuild.exe 使用错误。
问题已通过使用 msbuild 文件夹中的 msbuild.exe 而不是 .Net 文件夹解决。
%ProgramFiles(x86)%\msbuild\14.0\Bin
【讨论】:
是的,blogs.msdn.microsoft.com/visualstudio/2013/07/24/… MSBuild 自 Visual Studio 2013 以来就是 Visual Studio 的一部分。因为您已经解决了这个问题。请标记您的答案,这对遇到相同问题的其他社区有好处。谢谢。 @Metaphor:您如何将路径从 .NET 4.0 MSBuild 更改为 Msbuild,如您的答案所示? 我完全限定了批处理文件中的可执行文件。【参考方案2】:如果代码是cordova,试试这个:
找不到 Microsoft.VisualStudio.WJProject.Default.props。错误 MSB4019
输入platform/windows/cordova/lib
,用记事本打开msbuildtools
,编辑这部分:
var versions = ['15.0', '14.0', '12.0', '4.0'];
使用您拥有的版本。
例如将两个函数中的15和14去掉
var versions = ['12.0', '4.0'];
并删除此行中的|| versions[2] || versions[3]
var msbuildTools = versions[0] || versions[1] || versions[2] || versions[3];
module.exports.findAvailableVersion = function ()
var versions = ['15.0', '14.0', '12.0', '4.0'];
return Q.all(versions.map(checkMSBuildVersion)).then(function (versions)
// select first msbuild version available, and resolve promise with it
var msbuildTools = versions[0] || versions[1] || versions[2] || versions[3];
return msbuildTools ? Q.resolve(msbuildTools) : Q.reject('MSBuild tools not found');
);
;
function findAllAvailableVersionsFallBack()
var versions = ['15.0', '14.0', '12.0', '4.0'];
events.emit('verbose', 'Searching for available MSBuild versions...');
return Q.all(versions.map(checkMSBuildVersion)).then(function(unprocessedResults)
return unprocessedResults.filter(function(item)
return !!item;
);
);
【讨论】:
以上是关于错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入的主要内容,如果未能解决你的问题,请参考以下文章
外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”
MSBuild 无法使用临时密钥签署 ClickOnce 清单(错误 MSB3326 和 MSB3321)