我们有一个设置项目,当前添加了来自不同 Visual Studio 项目的项目输出。我们想更改打包系统并使用一个文件夹,其中包含一堆准备在设置中部署的部署文件。
但这意味着我们需要一个一个地添加文件,并在每个版本有新文件时继续添加它们。
我在这个问题中看到我们无法添加带有 *.aspx 等规则的文件。
所以我正在考虑创建一个小工具,它将根据可用文件更改 vdproj 文件。你能帮我看看这个文件的格式吗?似乎有一些与包含的每个文件相关联的 GUID。
有没有人对如何做到这一点有更好的解决方案?
我们目前还没有考虑使用不同的设置工具,我们只是寻找一个简单的文件打包解决方案。
10 回答
要添加整个文件夹,只需打开 Windows 资源管理器窗口,然后将要添加的所有文件拖到文件系统视图中。
我终于找到了解决这个问题的真正方法。我需要的是在构建时将给定外部目录(不是项目的一部分)中的所有文件添加到安装项目中,即如果将文件添加到该外部目录,它将自动包含在下一个版本的安装程序。
我所做的是我在解决方案(类库项目)中创建了一个新项目并从中删除了所有内容:Class1.cs、AssemblyInfo.cs 以及包含上述文件<Compile>
元素的 csproj 文件的相关 ItemGroups 和<Reference>
元素包括。
然后,我添加了一个新的 ItemGroup:
<ItemGroup>
<Content Include="Path\To\The\Directory\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
这样,这个新项目不包含任何文件,但它将所有文件(递归地,由\**\
指示目录中的 指示)引用为Content files。
因此,在构建时,这些文件被视为内容文件,因此被复制到新项目的输出目录中。
那么,我为什么要做以上所有事情呢?只是因为,安装项目可以选择包含来自另一个项目的内容文件!
因此,通过这种方式,您可以使任意外部文件成为解决方案的“一部分”,而无需实际列出它们,文件列表在build time进行评估,然后从 Setup 项目中引用它们。
这个问题似乎没有简单的解决方案。我们最终更改了设置工具并使用 Advanced Installer 来创建设置,它有一个很好的功能,可以同步文件夹内的文件以进行部署。
我们遇到了同样的问题。您不能拖放.. 但是您可以在 Windows 资源管理器中转到您想要的内容,复制项目(可以包括子文件夹),然后返回 VS Installer 并粘贴这些(例如应用程序文件夹)。
笔记。如果您需要创建自定义文件夹(例如 c:\html),您也可以使用此方法,但您必须先在左侧窗格中创建自定义文件夹(指定绝对路径作为目标),然后再次转到左侧窗格并粘贴。
此方法适用于打包一组文件夹,但不会同步可能具有不同内容的文件夹!如果部署之间的内容发生变化,您必须重新复制/粘贴以使安装程序文件包含所有内容!
您可以使用宏添加文件夹中的所有文件吗?
另外,也许您可以只清除安装项目中的文件(使用宏或加载项)并使用相同的方法将文件添加到文件夹中。
您可以右键单击资源管理器中的文件夹并单击复制,然后右键单击安装项目中文件系统视图中的文件夹并单击粘贴。拖放对我不起作用。
我有同样的问题。虽然不是理想的解决方案,但我的一个想法是拥有一个将文件压缩起来的批处理文件,然后我的安装项目只是分发该 zip。之后,您必须在安装后解压缩它们。
或者,您可以编写一个小应用程序将它们压缩成一个文件,并在应用程序第一次运行时解压缩它们。基本上一样的解决方案,只是你自己写,所以不需要使用第三方解压工具,安装过程更干净一些。
我想我实际上很快就会为我的项目执行后一种解决方案,因为我也没有考虑为更好的安装应用程序支付大笔费用。
哦,不,您可以将文件和文件夹拖放到 vs 中的设置目录
以下工作完美:只需将文件夹拖放到安装目录(使用 Windows 资源管理器而不是解决方案资源管理器)。然后它将添加其中的所有文件和所有子文件夹。
- 您可以在 Windows 资源管理器中右键单击文件夹(需要复制)并单击 Ctrl+A 或选择所有文件并单击复制。
- 在 FileSystem 编辑器中,导航到左侧。然后右键单击应用程序文件夹并单击添加并选择文件夹。
- 为文件夹命名
- 在文件系统编辑器的右侧,右键单击并选择粘贴
- 该文件夹的所有内容将被复制到步骤 2 中新创建的文件夹中。
有关详细信息,请参阅以下链接 https://dzone.com/articles/creating-msisetup-package-c