如何使用 MSBuild NuGet 将 .csproj 文件加载到 .NET Core 3.0
How to Load .csproj file into .NET Core 3.0 using MSBuild NuGet
我有一个非常简单的控制台项目:
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:
'The imported project
"C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets" was not found.
Confirm that the expression in the Import declaration "C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets" is correct, and that the file exists on disk. C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\FishStory.csproj'
我希望如此简单的 MSBuild 测试 "just work",但我似乎遗漏了什么。我该怎么做才能加载此 .csproj 文件?
似乎 NuGet 包添加了必要的 .dll 以使用 Project 对象,但各种项目类型必须具有加载 Project .csproj 时使用的 .target 和 .props 文件。
要加载我的特定项目,我必须将以下文件添加到输出目录。我通过将文件放在我的项目中并将它们标记为 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
要添加这些文件以便将它们复制到输出文件夹:
- 将文件添加到您的项目(对于 .NET Core,您只需将文件添加到目录)
- 右键单击 解决方案资源管理器 和 select 属性
中的文件
- 将复制到输出目录设置为如果更新则复制
我从以下位置提取了 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 Studio19\Community\MSBuild\Xamarin
最后,我还不得不手动添加 NuGet 包 Microsoft.Build.Utilities.Core。不知道为什么在添加 Microsoft.Build
时没有自动添加
我在尝试加载针对 netcore31 平台的项目时遇到了同样的异常。
但之后我安装了
- Microsoft.Build.Utilities.Core(16.5.0)
- Microsoft.Build (16.4.0)
nuget包,没有更多的异常。项目加载成功。
也许,它会帮助更多人。
我有一个非常简单的控制台项目:
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: 'The imported project "C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets" was not found. Confirm that the expression in the Import declaration "C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\Microsoft.CSharp.targets" is correct, and that the file exists on disk. C:\Users\vchel\source\repos\ForDave\ForDave\bin\Debug\netcoreapp3.0\FishStory.csproj'
我希望如此简单的 MSBuild 测试 "just work",但我似乎遗漏了什么。我该怎么做才能加载此 .csproj 文件?
似乎 NuGet 包添加了必要的 .dll 以使用 Project 对象,但各种项目类型必须具有加载 Project .csproj 时使用的 .target 和 .props 文件。
要加载我的特定项目,我必须将以下文件添加到输出目录。我通过将文件放在我的项目中并将它们标记为 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
要添加这些文件以便将它们复制到输出文件夹:
- 将文件添加到您的项目(对于 .NET Core,您只需将文件添加到目录)
- 右键单击 解决方案资源管理器 和 select 属性 中的文件
- 将复制到输出目录设置为如果更新则复制
我从以下位置提取了 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 Studio19\Community\MSBuild\Xamarin
最后,我还不得不手动添加 NuGet 包 Microsoft.Build.Utilities.Core。不知道为什么在添加 Microsoft.Build
时没有自动添加我在尝试加载针对 netcore31 平台的项目时遇到了同样的异常。
但之后我安装了
- Microsoft.Build.Utilities.Core(16.5.0)
- Microsoft.Build (16.4.0)
nuget包,没有更多的异常。项目加载成功。
也许,它会帮助更多人。