【发布时间】:2022-01-26 18:41:01
【问题描述】:
几天来,我一直在尝试弄清楚如何将我的原生 C++ DLL 依赖项包含在使用 VS2019 构建的 C# WinForms 应用的 ClickOnce 部署中。本机 DLL 不会出现在 .NET 主应用程序的“属性”页面的 Publish -> Application Files 下(尽管 .NET DLL 会出现)。
我已经读了一百遍了:
将本机 DLL 的构建操作设置为“内容”。
...我认为我在解释/做错了。
本机 C++ 项目的输出自然不会“包含”在任何项目中(公开构建操作属性的明显先决条件),因此不会出现在解决方案资源管理器中以允许我将其设置为“内容”。所以我
[Solution Explorer] -> Project -> Add -> Existing Item -> [select native C++ DLL]
将本机 C++ DLL 添加到项目以启用构建操作属性,然后我将其设置为“内容”。 {重要提示:它必须“包含”在项目中,而不仅仅是解决方案才能获得构建操作属性。}
所以我这样做并且它有效,但当然我必须选择本机 DLL 的特定平台和配置(例如,x64 和版本),并且此选择是固定的(不受 VS2019 GUI 中的选择控制当我构建时),更糟糕的是——甚至没有标记项目中“包含”了哪个平台和配置。 {旁注:我如何不必在 Publish -> Application Files 下选择要使用的 .NET DLL 的哪个版本(x86 与 x64)?它只是自动选择正确的?我如何设置一个 x86 版本和一个 x64 版本,我可以在它们之间来回切换并构建每个版本?} 我无法想象这是它应该完成的方式。它易碎且不透明。肯定有更好的方法。我想我错过了其他人都认为“显而易见”的东西。任何其他尝试使用或维护此配置的开发人员都会诅咒我的名字,而且这样做是对的。
使 ClickOnce 部署(通过 VS2019 GUI)在 ClickOnce 部署包中包含我的本机 DLL(同一解决方案中包含的项目)的“正确方法”是什么?
注意,我在本机 C++ 项目的“属性”页面中发现了一个有希望的设置:自定义构建设置 -> 常规 -> 将输出视为内容。不过好像没什么效果。
我会永远感激任何指点。
【问题讨论】:
-
您好 Jimbo1987,很高兴知道您找到了解决此问题的解决方案!请考虑接受它作为答案以将其状态更改为已回答。它还将帮助其他人解决类似的问题。见can I answer my own question..,只是一个提醒:)
-
嗨 Jiale Xue,我发现 an 答案(或两个)不太令人满意,因为它们仍然有点脆弱(需要手动编辑父项目文件如果不小心,可能会被覆盖),并且不是非常直观。最后,第一次构建时会引发错误。出于这些原因,我将我的“答案”称为“解决方法”或“黑客”,但我希望存在一个真实且更好的答案。我不认为他们用我召唤来完成它的方式真的是做到这一点的“最佳方式”。希望其他人可以改进这些。
标签: visual-studio dll deployment clickonce