【问题标题】:MSBuild not publishing dll.config of dependency for ClickOnceMSBuild 没有为 ClickOnce 发布依赖项的 dll.config
【发布时间】:2021-09-22 01:15:22
【问题描述】:

我通过 ClickOnce 发布的 C# projectA 依赖于 projectB。我需要 projectB.dll.config 文件才能使 projectA 工作。虽然 MSBuild 将 projectB.dll.config 正确复制到 projectA/bin/ConfigXY,但它并未发布。 VisualStudio (2017) 甚至没有在 Application->Publish->Application Files 中显示该文件。

作为一种解决方法,我将其添加到 A.csproj:

<Content Include="..\projectB\bin\Release\projectB.dll.config"> 
  <Link>projectB.dll.config</Link> 
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</Content> 

现在 VS 在“应用程序文件”列表中显示该文件,但这当然仅适用于发布构建配置。由于我在项目 A 中有很多配置映射到 B 中的不同配置,因此我不能简单地在路径中使用 $(Configuration)

我找到了一些包含 ..\**\*.dll.config 的建议,但这似乎很危险,因为当 Debug 和 Release 文件夹都存在时(来自以前的版本),我可能会得到错误的文件夹。

这样做的正确方法是什么?

【问题讨论】:

    标签: msbuild visual-studio-2017 clickonce


    【解决方案1】:

    我想将此作为评论发布,但由于限制,我将其发布为答案,对此我深表歉意。

    我做了一些测试,似乎要包含要发布的project.dll.config文件(显示在应用程序>发布>应用程序文件中),我们需要将此文件包含到项目A中。

    我猜你的意思是你想使用“..\XXX\XXX\Release\projectB.dll.config”路径进行发布构建并使用“..\XXX\XXX\Debug\projectB.dll.config”不使用 $(Configuration) 的 Debug 构建路径对吗?

    一般来说,MSBuild 使用$(configuration) 来切换配置模式,如果它不可用,据我所知,从 MSBuild 方面来说,切换/匹配配置模式是困难的或不可能的。

    【讨论】:

    • 由于 projectB 也是由 MSBuild 在同一运行中构建的,并且我可以在日志中看到用于 projectB 的配置,因此我认为必须有一种访问它的方法。不幸的是,projectA 的配置和 projectB 的配置之间的连接在 .sln 文件中,而不是 .csproj 文件中。我需要的是$(projectB.Configuration) 之类的东西。我找到的是%(ProjectReference.Name)@(_ResolvedProjectReferencePaths),但没有为引用的项目配置。
    • @user2727133 我检查了common MSBuild project properties,仍然没有找到任何可能满足您要求的相关属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2020-05-20
    • 1970-01-01
    相关资源
    最近更新 更多