问题描述
我有一个非常简单的控制台项目:
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
要添加这些文件以将其复制到输出文件夹:
- 将文件添加到项目中(对于.NET Core,您只需将文件添加到目录中)
- 在解决方案资源管理器中右键单击该文件,然后选择属性
- 将复制到输出目录设置为较新时复制
我从以下位置拉出了目标/props/.dll文件:
- C:WindowsMicrosoft.NETFramework64v4.0.30319
- C:程序文件(X86)MSBuildMonoGamev3.0
我猜其他项目类型(如Android Xamarin项目)可能需要不同的.Target文件,如果使用的是Visual Studio 2019社区:
,可以在此处找到- C:程序文件(X86)Microsoft Visual Studio2019CommunityMSBuildXamarin
这篇关于如何使用MSBuild NuGet将.csproj文件加载到.NET Core 3.0中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!