在 ClickOnce 应用程序中包含文件夹

Posted

技术标签:

【中文标题】在 ClickOnce 应用程序中包含文件夹【英文标题】:Include a Folder in ClickOnce Application 【发布时间】:2012-12-01 05:18:56 【问题描述】:

我创建了一个 Windows C# 项目并将其作为 ClickOnce 应用程序(项目属性中的发布功能)进行安装。 我想包含一个文件夹,其中包含 Crystal Report (rpt) 文件。在我的应用程序中,我将 rpt 文件的路径作为我的安装位置。 如何在发布时包含此文件夹。这样我就不需要手动复制文件夹了。

【问题讨论】:

@M.Babcock 我猜微软是因为这里使用了 c#。 @itzArun - 将文件夹中的文件标记为资源不会自动将它们包含在部署中? 是的,它是 Microsoft Visual Studio 2008 应用程序的 ClickOnce。 @M.Babcock 但是如何将水晶报表文件标记为资源? @itzArun - 将文件添加到项目中,在解决方案资源管理器中选择文件,然后将文件的构建操作(在文件的属性中)更改为“资源”。 【参考方案1】:

Tom 已经解释了如何添加文件。您明确表示您希望在发布 ClickOnce 应用程序后为其添加一个文件夹。假设您在解决方案的根目录中有一个名为 Dependencies 的文件夹,其中包含一个文件夹 Reports,其中包含您的所有 RPT 文件。以下是确保部署的应用程序包含 Dependencies 文件夹的所有内容的方法:

    在 Visual Studio 中右键单击您的项目并选择“卸载项目”。

    右击选择编辑csproj文件。

    在结束 </Project> 标记之前添加:

    <ItemGroup> <Content Include="$(SolutionDir)Dependencies\**\*"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <Visible>false</Visible> </Content> </ItemGroup>

    这会将 Dependencies 文件夹中的所有内容添加到项目中。我们在 Include 和 %(RecursiveDir) 的末尾使用 \**\* 语法以确保 Reports 文件夹将出现在已发布的版本以及报告文件中。设置<Visible>false</Visible> 后,您将不会看到解决方案资源管理器中的项目。

【讨论】:

您先生刚刚为我节省了很多浪费的时间。感谢您的详细描述! 如何复制整个目录,而不仅仅是将其内容复制到项目中。例如,在 ClickOnce 应用程序文件夹中显示 foo 文件夹。【参考方案2】:

您必须将项目添加到项目并将它们标记为“内容”(在解决方案资源管理器中选择项目,右键单击,属性,设置构建操作)。

【讨论】:

这不会创建所需的文件夹。这些文件包含在程序目录中,但是如果您需要创建的文件夹,您将如何做呢? @Patratacus:文件必须添加到安装后应放置的文件夹下。这将创建文件夹。还剩下一件事:确保将“应用程序文件”对话框中添加的文件的发布状态列更改为“包含”,而不是“包含”(自动)。见this。【参考方案3】:

假设我们有两个项目:main - ProjectA 和其他一些 ProjectB 引用 ProjectA。在ProjectB 中,我们有一个文件夹FolderB,其中包含一些应包含在ProjectA 的发布(pdf、rpt 等)中的文件。

一旦我们构建了ProjectAbin 目录中就会有所有引用的文件和文件夹。但是,当我们使用 ClickOnce 工具发布解决方案时,来自 ProjectB 引用的文件夹不会包含在安装程序中,您也不会在项目发布设置的 Application Files 窗口中看到它们。

解决方案是在ProjectA 中创建一个名为FolderB 的新文件夹,并将ProjectB 中的FolderB 中的现有项目添加到ProjectA 中的这个新文件夹中,使用添加为链接选项。然后所有文件,包括链接到ProjectB 文件夹的文件,都将包含在发布中。

【讨论】:

【参考方案4】:

自从 OP 以来已经有很长时间了,但是当我向我的解决方案添加一个文件夹时,向该文件夹添加一个 Crystal Report 并将其标记为“内容”(根据 Tom),然后发布并安装 - 文件夹和报告被添加到 ClickOnce 安装位置。所以汤姆的解决方案对我有用。

【讨论】:

【参考方案5】:

Barrie 有最好的解决方案,真的解决了我需要的所有问题!无需在多个项目中包含相同的文件,只需设置在调试中复制文件以实现本地功能和调试的预构建事件。解决了我在一个位置并在多个项目中使用 rdlc(报告)的问题。

【讨论】:

以上是关于在 ClickOnce 应用程序中包含文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在 clickOnce 安装中包含 ACE OLEDB 12 驱动程序

部署 ClickOnce 时缺少 dll

.NET ClickOnce 没有安装必备文件?

如何在 android studio 中包含应用内图标选择器?

如何在静态文本标签中包含特殊字符?

在 HTML 文件中包含另一个 HTML 文件 单页应用程序