【问题标题】:Parse csproj file using cake's ParseProject使用 cake\'s ParseProject 解析 csproj 文件
【发布时间】:2022-08-10 14:15:27
【问题描述】:

创建最小的复制项目:

dotnet new classlib --no-restore --output /tmp/Foo
cd /tmp/Foo
dotnet new tool-manifest
dotnet tool install cake.tool
touch build.cake

将此最小脚本放入build.cake

Task(\"Default\").Does(() => {
  var file = \"./Foo.csproj\";
  Information(FileExists(file).ToString());
  var props = ParseProject(file);
});
RunTarget(\"Default\");

运行:

dotnet cake

结果:

========================================
Default
========================================
True
An error occurred when executing task \'Default\'.
Error: Failed to parse project properties

当然这个最小的脚本应该成功 - 我犯了一个错误,还是这是一个错误?

我的环境:linux,dotnet 6.0.302。

  • 您可以通过调用像 dotnet cake --verbosity=diagnostic 这样的 cake 将输出的详细程度提高到最大,看看这是否会让您更接近错误。
  • @Nils 谢谢,这是个好主意!我只是这样做了,它给了我一个很大的堆栈跟踪。不幸的是,里面没有任何与我的代码相关的东西——这都是我不明白的内部蛋糕。我认为这可能是一个错误,但我不确定。

标签: cakebuild


【解决方案1】:

开箱即用,Cake(版本 2.2.0)中的 ParseProject 别名只知道如何解析使用“旧”格式的 Visual Studio 项目文件。

由于您正在创建的 Visual Studio 项目文件使用“新”格式(即它是使用 dotnet CLI 生成的,并且针对 .NET Core),Cake 中的 ParseProject 将无法识别它。

然而,在 Cake.Incubator 插件中有一个替代的 ParseProject 别名可以做你想做的事。您可以通过执行以下操作来使用它:

#addin nuget:?package=Cake.Incubator&version=7.0.0

Task("Default").Does(() => {
  var file = "./cake-test.csproj";
  Information(FileExists(file).ToString());
  var props = ParseProject(file, "Release");
});

RunTarget("Default");

结果:

========================================
Default
========================================
True

Task                          Duration
--------------------------------------------------
Default                       00:00:00.0496415
--------------------------------------------------
Total:                        00:00:00.0496415

在某个时候,Cake.Incubator 插件中的工作可能会合并到 Cake 中,并将作为新版本发布,但是,现在,您需要直接引入该插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2013-10-19
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多