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

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

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”。
确认导入声明“ 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文件?

参考方案

似乎NuGet软件包添加了必要的.dll才能使用Project对象,但是各种项目类型必须具有.target和.props文件,这些文件在加载Project .csproj时会使用。

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

我添加了以下文件:

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,您只需将文件添加到目录中)
在解决方案资源管理器中右键单击该文件,然后选择“属性”
将复制到输出目录设置为复制(如果较新)

我从以下位置提取了targets / props / .dll文件:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319
C:\ Program Files(x86)\ MSBuild \ MonoGame \ v3.0

我猜想其他项目类型(例如Android Xamarin项目)可能需要不同的.targets文件。

最后,我还必须手动添加NuGet包Microsoft.Build.Utilities.Core。不知道为什么在添加Microsoft.Build时没有自动添加

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

ASP.NET Core Singleton实例与瞬态实例的性能 - c#

在ASP.NET Core依赖注入中,我只是想知道注册Singleton实例是否会比注册Transient实例更好地提高性能?在我看来,对于Singleton实例,创建新对象和相关对象只需花费一次时间。对于Transient实例,此成本将针对每个服务请求重复。因此Singleton似乎更好。但是,在Singleton上使用Transient时,我们可以获得多…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…

如何在ASP.NET Core(使用JavascriptService)应用程序中使Node.js代码调用csharp代码? - c#

我正在将asp.net内核用于简单的Web api服务器(实际上是使用Deepstream)。虽然C#可以使用NodeServices.InvokeExportAsync完美地调用nodejs代码,但是当我尝试将Action / Func作为NodeServices.InvokeExportAsync的参数传递给nodejs时,却得到了System.Aggr…

从.NET Core 2.1降级到.NET 4.7.1时,如何使用IApplicationBuilder和IServiceCollection? - c#

我不得不将我的项目从.NET Core 2.1更改为.NET 4.7.1,并且修复了几乎所有错误,但以下错误仍然困扰着我 “ IApplicationBuilder”不包含“ UseHsts”的定义,也找不到找不到接受类型为“ IApplicationBuilder”的第一个参数的扩展方法“ UseHsts”(是否缺少using指令或程序集引用?) “ IA…