无法在 Visual Studio 2015 中构建,因为找不到“Microsoft.Build.Tasks.v14.0.dll”

问题描述 投票:0回答:13

尝试在 Visual Studio 2015 中构建时,缺少以下文件?该项目之前是在VS2013中构建的。

严重性代码 说明 项目文件行错误 任务工厂 无法从程序集“C:\Program”加载“CodeTaskFactory” 文件 (x86)\MSBuild.0 in\Microsoft.Build.Tasks.v14.0.dll”。可以 不加载文件或程序集“file:///C:\Program Files” (x86)\MSBuild.0 in\Microsoft.Build.Tasks.v14.0.dll' 或其之一 依赖关系。该系统找不到指定的文件。

c# msbuild visual-studio-2015
13个回答
60
投票

程序集已重命名。将 CodeTaskFactory MSBuild 任务上的 AssemblyFile 参数更改为...(在您的错误中应该有一个该任务所在的目标文件名)

AssemblyFile="C:\Program Files (x86)\MSBuild\14.0\Bin\Microsoft.Build.Tasks.Core.dll"

很可能有人试图聪明地使用像这样的 MSBuild 属性..(这不适用于 MSBuild 14,但适用于 12)...

AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll"

仅供参考...还有其他一些,例如

Microsoft.Build.Utilities.v12.0.dll
已重命名为
Microsoft.Build.Utilities.Core.dll


26
投票

对我使用 Visual Studio 2017 的帮助是复制 Microsoft.Build.Tasks.Core.dll 并将其重命名为 Microsoft.Build.Tasks.v15.0.dll


21
投票

就我而言,这是 SFML.NET nuget 包的问题。

它依赖于过时的 Nuget Baseclass.Contrib.Nuget.Output 组件,这就是构建失败的原因。

我手动更新到.Net 4.6后,从项目文件中删除了所有nuget工作人员,并从项目中删除了其文件,并再次读取了所有依赖项,Baseclass.Contrib.Nuget.Output的版本已更改,中提琴!


9
投票

我第一次重新启动 Visual Studio,为我工作

第二次我再次遇到此错误,我更新了:

Install-Package Baseclass.Contrib.Nuget.Output -Version 2.2.0-xbuild02


6
投票

我只需重新启动 Visual Studio 就足够了。

我怀疑我之前已经杀死了所有 MSBuild.exe 进程来做其他事情,并且没有任何 MSBuild.exe 进程导致了错误。


4
投票

根据加里的回答,我将其参数化如下:

<Choose>
  <When Condition="'$(MSBuildToolsVersion)'=='14.0'">
    <PropertyGroup>
      <TasksAssemblyName>Microsoft.Build.Tasks.Core</TasksAssemblyName>
    </PropertyGroup>
  </When>
  <Otherwise>
    <PropertyGroup>
      <TasksAssemblyName>Microsoft.Build.Tasks.v$(MSBuildToolsVersion)</TasksAssemblyName>
    </PropertyGroup>
  </Otherwise>
</Choose>
<UsingTask TaskName="SecondsSinceEpoch" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\$(TasksAssemblyName).dll">

2
投票

我的解决方案:从“*.csproj”文件中删除两行:

<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

1
投票

就我而言,我从根目录中删除了“ls.pubignore.wpp.targets”文件。它消除了错误。 :)


1
投票

就我而言,我也遇到了同样的问题 我在 VS2015 中更新了 NuGet 包管理器中的一些包,然后尝试在另一台未安装 vs2015 的计算机上打开 vs2013 中的相同解决方案。

安装 Microsoft Build Tools 2015 已解决该错误。这会将 Microsoft.Build.Utilities.Core.dll 添加到 GAC,我认为这就是它的工作原理。

https://www.microsoft.com/en-in/download/details.aspx?id=48159


1
投票

从 nuget 包更新“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”,它解决了我的错误,这是最好的解决方案,经过多次尝试我找到了解决方案


0
投票

对于 Visual Studio 2017,这对我有用,它是两个提供的解决方案的混合。两者都无法单独工作,所以这就是我将其作为新答案提交的原因。

在文件中

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\VisualStudio\v15.0\CodeAnalysis\Microsoft.CodeAnalysis.Targets

AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll">
替换为
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">

然后将文件

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Build.Tasks.Core.dll
复制到同一文件夹中,名称为
Microsoft.Build.Tasks.v15.0.dll


0
投票

对我来说,我正在从使用

msbuild
构建解决方案转换为使用
dotnet build
。从 codedom 2.0.1 -> 3.6.0 更新允许构建解决方案。


0
投票

我通过将

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\CodeAnalysis\Microsoft.CodeAnalysis.Targets
重命名为 MSBuild 和 VS 2015 找不到的内容来修复此问题

奇怪的是,错误的 AssemblyTasks 引用位于我正在编译的存储库之外的文件中,我不必编辑该文件。但我一直在使用 Visual Studio 的几个不同版本,我对其中一个版本出现问题并不感到惊讶。

© www.soinside.com 2019 - 2024. All rights reserved.