我有一个非常简单的控制台项目:
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 文件?
当我尝试加载针对 netcore31 平台的项目时,我遇到了相同的异常。
但之后我已经安装了
nuget 包,不再有例外。项目加载成功。
也许,它会对某人有更多帮助。
NuGet 包似乎添加了使用 Project 对象所需的 .dll,但各种项目类型必须具有加载 Project .csproj 时使用的 .target 和 .props 文件。
要加载我的特定项目,我必须将以下文件添加到输出目录。我通过将文件放入项目中并将它们标记为“如果较新则复制”来完成此操作。 我添加了以下文件:
Microsoft.Common.targets
MonoGame.Build.Tasks.dll(不确定我是否需要这个)
将文件添加到您的项目中(对于.NET Core,您只需将文件添加到目录中)
C:\Windows\Microsoft.NET\Framework64 4.0.30319
C:\Program Files (x86)\Microsoft Visual Studio�9\Community\MSBuild\Xamarin
。不知道为什么在添加 Microsoft.Build 时没有自动添加
将
PackageReference
Microsoft.Build.Locator
。在使用任何 Microsoft.Build
MSBuildLocator.RegisterDefaults();
这个神奇的咒语将设置所有的魔法。创建 ProjectOptions
的实例向其中添加
GlobalProperties
solutionFilePath + "\\"
Project
ProjectOptions
,例如 Project.FromFile()
。