错误MSB4057:项目中不存在目标“生成”

时间:2019-08-31 07:35:02

标签: .net visual-studio .net-core msbuild

我在.net核心中有一个简单的控制台应用程序,我尝试使用“ dotnet build dirs.proj”进行编译,但是“我得到:错误MSB4057:目标“ Build”在项目中不存在。”

如果有人有任何想法,请分享您的想法!

这是dirs.proj,非常简单。

<Project>
  <Import Project="Directory.Build.props" />
  <Import Project="Directory.Build.targets" />
  <ItemGroup>
    <ProjectFile Include="ConsoleApp1/ConsoleApp1.csproj" />
  </ItemGroup>
</Project>

目标文件未定义内部版本。但是,如果我定义类似的内容,则不会执行任何操作。

提前感谢任何想法或示例。

1 个答案:

答案 0 :(得分:0)

  

目标文件未定义内部版本。

当您使用诸如dotnet build dirs.proj之类的命令时,dotnet.exe会尝试在build文件中查找名为dirs.proj的目标。您应该在build target文件或dirs.proj文件中直接直接定义xx.targets。否则您会收到错误MSB4057 ...

  

但是,如果我定义类似的东西,它什么也没做。

我假设您正在尝试通过命令dotnet build dirs.proj构建ConsoleApp1项目,如果这样,则dirs.proj文件中的内容应为:

<Project>
  <Import Project="Directory.Build.props" />
  <Import Project="Directory.Build.targets" />
  <ItemGroup>
    <ProjectFile Include="ConsoleApp1/ConsoleApp1.csproj" />
  </ItemGroup>
  <Target Name="build"> 
    <Message Text="Custom build starts..." Importance="High"/>
    <MSBuild Projects="@(ProjectFile)"/>
 </Target>
</Project>

您可以在定义的build target中使用msbuild task,它将为您编译并构建consoleApp1项目。

此外:

1。根据脚本,目标文件,道具文件和dirs.proj文件应位于解决方案目录中

2。如果解决方案目录中有许多项目,则可以尝试使用通配符将它们全部包括在内:

<ItemGroup>
    <ProjectFile Include="**/*.csproj" />
</ItemGroup>

3。对于msbuild任务,可以在使用此任务时指定属性。您可以指定输出路径,配置(调试或发布),程序集名称...

4。参见this document,实际上Directory.Build.props and Directory.Build.targets是可以工作的,即使我们没有明确地导入它们。

希望它会有所帮助:)