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

14
我创建了一个Windows C#项目,并将其制作为ClickOnce应用程序(在项目属性中的发布功能)。我想要在发布时包含一个包含Crystal Report(rpt)文件的文件夹。在我的应用程序中,我已经给出了rpt文件的路径作为我的安装位置。我该如何在发布时包含这个文件夹,以免手动复制文件夹。

@M.Babcock 我猜是因为这里用了C#,所以是微软。 - Ravi Y
@itzArun - 将文件夹中的文件标记为资源不会自动将它们包含在部署中吗? - M.Babcock
是的,它是Microsoft Visual Studio 2008应用程序的ClickOnce。 - itzArun
@M.Babcock 但是我该如何将Crystal报表文件标记为资源? - itzArun
@itzArun - 将文件添加到项目中,在“解决方案资源管理器”中选择该文件,然后将文件的生成操作(在文件属性中)更改为“资源”。 - M.Babcock
甚至不将文件复制到安装目录中。 - itzArun
5个回答

27

索姆已经解释了如何添加文件。您具体说您想要在发布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>,您将不会看到这些项在解决方案资源管理器中。


2
先生,您刚刚为我节省了很多浪费的时间。感谢您提供详细的描述! - casaout
2
如何将整个目录复制到项目中,而不仅仅是它的内容。例如,在 ClickOnce 应用程序文件夹中存在名为 foo 的文件夹。 - Jack

23

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


2
这不会创建所需的文件夹。虽然文件包含在程序目录中,但如果您需要创建文件夹,该怎么做呢? - Patratacus
1
@Patratacus:文件必须添加到安装后应放置的文件夹下。这将创建文件夹。还有一件事情:确保在“应用程序文件”对话框中将发布状态列更改为已添加的文件,以包括而不是自动包括。请参见此处 - Veverke

2

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

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

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


这比其他答案更有帮助!非常感谢这个答案! - Danny James

0

距离原帖已经过去了很长时间,但是当我向我的解决方案中添加一个文件夹,将Crystal Report添加到该文件夹并将其标记为“内容”(按照Tom的建议),然后发布和安装 - 该文件夹和报告将被添加到ClickOnce安装位置。所以Tom的解决方案对我有效。


0

Barrie提供了最好的解决方案,真正解决了我所需的一切!无需在多个项目中包含相同的文件,只需设置预构建事件,将文件复制到本地功能和调试的debug目录中。解决了我的rdlc(报表)在一个位置上并在多个项目中使用它们的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接