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

3

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

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:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets"。请确认Import声明中的表达式“C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets”是否正确,并且该文件在磁盘上存在。 C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\FishStory.csproj'
我期望这样一个简单的MSBuild测试可以“正常工作”,但似乎我漏掉了一些东西。我该怎么做才能加载这个.csproj文件呢?
2个回答

1
我在尝试加载一个针对netcore31平台的项目时遇到了相同的异常。但是在安装了Microsoft.Build.Utilities.Core(16.5.0)和Microsoft.Build(16.4.0)nuget包之后,该异常不再出现。项目成功加载了。也许这会对其他人有所帮助。

我有和你一样的情况,但是你的解决方案对我没有用。还有其他建议吗? - sergi

1
似乎NuGet包已经添加了必要的.dll文件以使用Project对象,但是不同种类的项目必须具有.target和.props文件,在加载Project .csproj时会使用这些文件。
为了加载我的特定项目,我不得不将以下文件添加到输出目录中。我通过将文件放在我的项目中并将它们标记为Copy if Newer来完成此操作。
我添加了以下文件:
  • Microsoft.Common.targets
  • Microsoft.CSharp.targets
  • Microsoft.NETFramework.props
  • Microsoft.NETFramework.targets
在我的情况下,.csproj是一个MonoGame项目,所以我还需要添加以下内容:
  • MonoGame.Build.Tasks.dll(不确定是否需要)
  • MonoGame.common.props
  • MonoGame/v3.0/MonoGame.Content.Builder.targets
为了将这些文件添加到输出文件夹中,请执行以下操作:
  1. 将文件添加到您的项目中(对于.NET Core,您只需将文件添加到目录中即可)
  2. 右键单击Solution Explorer中的文件,然后选择属性
  3. 复制到输出目录设置为如果较新则复制
我从以下位置获取了targets/props/.dll文件:
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  • C:\Program Files (x86)\MSBuild\MonoGame\v3.0
我猜其他项目类型(例如Android Xamarin项目)可能需要不同的.targets文件,如果使用Visual Studio 2019 Community,则可以在此处找到。
  • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin

最后,我还必须手动添加NuGet包 Microsoft.Build.Utilities.Core 。 不确定为什么在添加 Microsoft.Build 时未自动添加

Solution Explorer Screenshot


你可能想要查看 https://github.com/microsoft/MSBuildLocator。 - MarkPflug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接