如何使用MSBuild NuGet将.csproj文件加载到.NET Core 3.0中

How to Load .csproj file into .NET Core 3.0 using MSBuild NuGet(如何使用MSBuild NuGet将.csproj文件加载到.NET Core 3.0中)
本文介绍了如何使用MSBuild NuGet将.csproj文件加载到.NET Core 3.0中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个非常简单的控制台项目:

class Program
{
    static void Main(string[] args)
    {
        var project = new Project(
            "FishStory.csproj", 
            null, 
            null, 
            new ProjectCollection());

        Console.ReadLine();
    }
}

这是.NET Core 3.0控制台应用程序,并且引用了Microsoft.Build(16.4.0)NuGet包。

找到.csproj文件FishStory.csproj(我没有收到缺少.csproj的异常),但我收到以下错误。

Microsoft.Build.Exceptions.InvalidProjectFileException: ‘导入的项目 "C:Usersvchelsource EposForDaveForDaveinDebug 找不到etcoreapp3.0Microsoft.CSharp.Target"。 确认导入声明"C:Usersvchelsource"中的表达式 EposForDaveForDaveinDebug Etcoreapp3.0Microsoft.CSharp.Target"是正确的,并且该文件存在于磁盘上。C:Usersvchelsource EposForDaveForDaveinDebug Etcoreapp3.0FishStory.csproj‘

我本以为这样一个简单的MSBuild测试会"正常工作",但我似乎遗漏了一些东西。如何加载此.csproj文件?

推荐答案

NuGet包似乎添加了使用项目对象所需的.dll,但各种项目类型必须具有加载项目.csproj时使用的.Target和.props文件。

要加载我的特定项目,我必须将以下文件添加到输出目录。我通过将文件放在项目中并将它们标记为更新时复制来完成此操作。

我添加了以下文件:

  • Microsoft.Common.Target
  • Microsoft.CSharp.Target
  • Microsoft.NETFramework.props
  • Microsoft.NETFramework.Target

在我的例子中,.csproj是一个MonoGame项目,所以我还必须添加:

  • MonoGame.Build.Tasks.dll(不确定我是否需要它)
  • MonoGame.Common.props
  • MonoGame/v3.0/MonoGame.Content.Builder.targets

要添加这些文件以将其复制到输出文件夹:

  1. 将文件添加到项目中(对于.NET Core,您只需将文件添加到目录中)
  2. 在解决方案资源管理器中右键单击该文件,然后选择属性
  3. 复制到输出目录设置为较新时复制

我从以下位置拉出了目标/props/.dll文件:

  • C:WindowsMicrosoft.NETFramework64v4.0.30319
  • C:程序文件(X86)MSBuildMonoGamev3.0

我猜其他项目类型(如Android Xamarin项目)可能需要不同的.Target文件,如果使用的是Visual Studio 2019社区:

,可以在此处找到
  • C:程序文件(X86)Microsoft Visual Studio2019CommunityMSBuildXamarin
最后,我还必须手动添加NuGet包Microsoft.Build.Utilities.Core.不确定为什么在添加Microsoft.Build时没有自动添加它

这篇关于如何使用MSBuild NuGet将.csproj文件加载到.NET Core 3.0中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)