2

使用带有 ClickOnce 的 System.Addins API 时,我有一个烦人的构建过程。使用 System.Addins 需要特定的目录结构,并且主项目不直接引用适配器、视图和合同,这与 ClickOnce 架构不能很好地配合。

构建过程令人讨厌的部分是我必须通过构建后事件将加载项组件中的 .dll 复制到主应用程序项目的目录中,然后从主项目手动引用这些文件,以便 ClickOnce将包括他们。首先,这需要 2 次构建迭代才能正确构建,其次,它会干扰源代码管理(我必须从源代码管理中排除复制的加载项 dll 文件,否则对它们所做的任何更改都需要签出)。

所以,我的问题是,有没有办法绕过这个黑客?更优雅的东西?

4

5 回答 5

3

我无法完全回答您的问题,但您似乎正在通过 Visual Studio 创建 ClickOnce 部署。我会放弃该方法并改用MageUI。它是一个独立的可执行文件,可以在框架 SDK 中找到,它将生成您的应用程序和部署清单文件。它带有一个 gui 版本 (mageui.exe) 和一个命令行版本 (mage.exe)。

Mage 可能不会摆脱您的构建后事件,但它应该消除必须引用文件才能让 ClickOnce 看到它们。

于 2008-12-30T14:34:59.657 回答
0

感谢您的意见,我目前正在按照您提到的方式进行操作;在我的项目中创建文件夹,并包含我需要的 dll。它有效,但它是一个丑陋的解决方案,它会干扰源代码控制。

我知道 ClickOnce 的局限性,我希望有办法解决它。例如,我在某处读到我可以使用部署项目来创建特定结构所需的适当依赖项。问题在于,一旦将其部署到公众,就没有简单的方法(在 ClickOnce 中)来更新这些依赖项。

于 2008-12-12T23:07:47.707 回答
0

我使用的解决方案是为所有项目提供一个输出文件夹。每个项目都将它自己的文件放在正确的子文件夹中。应用程序引导程序项目也将他的 dll 放在输出(根)文件夹中。然后,当您为引导程序创建一个可点击的内容时,它将从输出文件夹中获取所有内容。

最困难的部分是实际上将所有 dll 放在正确的位置(并且每个 dll 只有一次)

于 2009-10-27T10:32:47.943 回答
0

我通过将管道程序集作为内容添加到主要解决方案结构中来解决了这个问题。

为此,请将输出文件夹从 (/bin/debug /bin/Release) 更改为其他文件夹。我使用了 ../lib 否则你会得到一个 Visual Studio 无法引用此文件错误。

在主解决方案中创建管道文件夹

  • \AddInSideAdapters
  • \AddInViews
  • \合同
  • \HostSideAdapters

右键单击每个文件夹,然后单击“添加现有项目”更改以查看所有文件,然后浏览到您的 ../lib(或您有输出集的任何位置),然后下拉添加按钮(单击向下箭头)并单击“添加为链接”。

右键单击每个文件并将其设置为内容。

这将创建一个指向您的程序集的刷新文件,它们将包含在 clickonce 清单中。

于 2010-05-27T17:35:16.967 回答
-1

ClickOnce 不允许您将软件安装到您想要的位置。它将在文档和设置中安装二进制文件和 dll。您可以在项目属性中的“发布”选项卡中选择“应用程序文件”以选择要包含的其他文件。如果 System.Addings 需要相对于您的程序集的特定文件夹中的 dll,您可能只需在项目中创建该文件夹并从此处包含 dll。这可能有效。如果没有,我没有“hack”或其他解决方案,clickonce 很棒,但某些功能有限。

于 2008-12-12T22:06:19.330 回答