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

问题描述 投票: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 chel\source epos\ForDave\ForDave in\调试 etcoreapp3.0\Microsoft.CSharp.targets”未找到。 确认导入声明中的表达式“C:\Users chel\source epos\ForDave\ForDave in\调试 etcoreapp3.0\Microsoft.CSharp.targets”是正确的,并且该文件存在于磁盘上。C:\Users chel\source epos\ForDave\ForDave in\调试 etcoreapp3.0\FishStory.csproj'

我希望这样一个简单的 MSBuild 测试能够“正常工作”,但似乎我错过了一些东西。我可以做什么来加载这个 .csproj 文件?

c# .net-core msbuild project
3个回答
1
投票

当我尝试加载针对 netcore31 平台的项目时,我遇到了相同的异常。
但之后我已经安装了

  • Microsoft.Build.Utilities.Core(16.5.0)
  • Microsoft.Build (16.4.0)

nuget 包,不再有例外。项目加载成功。

也许,它会对某人有更多帮助。


1
投票

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

要加载我的特定项目,我必须将以下文件添加到输出目录。我通过将文件放入项目中并将它们标记为“如果较新则复制”来完成此操作。 我添加了以下文件:

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
  • 要添加这些文件,以便将它们复制到输出文件夹:

将文件添加到您的项目中(对于.NET Core,您只需将文件添加到目录中)
  1. 右键单击
  2. 解决方案资源管理器
  3. 中的文件,然后选择属性
  4. 复制到输出目录
  5. 设置为如果较新则复制
  6. 我从以下位置提取了 Targets/props/.dll 文件:

C:\Windows\Microsoft.NET\Framework64 4.0.30319
  • C:\Program Files (x86)\MSBuild\MonoGame 3.0
  • 我猜测其他项目类型(例如 Android Xamarin 项目)可能需要不同的 .targets 文件,如果使用 Visual Studio 2019 社区,可以在此处找到:

C:\Program Files (x86)\Microsoft Visual Studio�9\Community\MSBuild\Xamarin
  • 最后,我还必须手动添加 NuGet 包
Microsoft.Build.Utilities.Core

。不知道为什么在添加 Microsoft.Build 时没有自动添加


0
投票

    PackageReference
  • 添加到
    Microsoft.Build.Locator
    在使用任何 
  • Microsoft.Build
  • 类型的任何函数之前调用的函数中,(它必须是一个单独的函数)调用
    MSBuildLocator.RegisterDefaults();
    这个神奇的咒语将设置所有的魔法。
    创建 
  • ProjectOptions
  •  的实例
    
    向其中添加
  • GlobalProperties
  • 的实例。
    添加属性“SolutionDir”,其值为 
  • solutionFilePath + "\\"
  • 通过接受 
  • Project
  • 的函数创建您的
    ProjectOptions
    ,例如
    Project.FromFile()
    
        
© www.soinside.com 2019 - 2024. All rights reserved.