【问题标题】:Include a Folder in ClickOnce Application在 ClickOnce 应用程序中包含文件夹
【发布时间】: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 - 将文件添加到项目中,在解决方案资源管理器中选择文件,然后将文件的构建操作(在文件的属性中)更改为“资源”。

标签: c# clickonce publish


【解决方案1】:

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

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

  2. 右击选择编辑csproj文件。

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

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

  4. 这会将 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(报告)的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-06
        • 2022-01-07
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多