问题标签 [setup-project]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 以编程方式获取内容文件和主要输出
出于某种原因,我们有一个脚本可以创建批处理文件,以将我们编译的程序集、配置文件和各种其他文件 XCOPY 到我们的 beta 测试人员的网络共享中。我们确实有安装程序,但有些没有运行安装程序所需的权限,或者它们是通过 Citrix 运行的。
如果你一提到 XCOPY 和 Citrix 就吐得满桌都是,那就以此为借口早点回家吧。别客气。
该代码目前有数百行,例如:
过去情况更糟,有 20 个 int 参数(每种文件类型一个)表示是否将该文件类型复制到输出目录。
这数百行创建了具有数千行 XCOPY 行的上传/下载批处理文件。在我们的设置项目中,我们可以引用诸如“来自客户端的主要输出”和“来自客户端的内容文件”之类的内容。我希望能够通过非设置项目以编程方式执行此操作,但我不知所措。
显然,MS 使用 API 或解析 .csproj 文件来做到这一点。我该怎么做呢?我只是在寻找一种方法来获取任何设置类别的文件列表,即:
- 初级输出
- 本地化资源
- 内容文件
- 文档文件
编辑:我有一个像哈斯建议的设置项目,它是我正在寻找的一半。唯一不能成为完美解决方案的问题是多个项目依赖于它们自己的文件夹中的相同程序集,并且安装程序只会复制一次文件。
例子:
项目 Admin、Client 和 Server 都依赖 ExceptionHandler.dll,Admin 和 Client 都依赖 Util.dll,而 Server 不依赖。这就是我要找的:
- 行政
- 管理员程序
- 管理员.exe.config
- 异常处理程序.dll
- 实用程序.dll
- 客户
- 客户端.exe
- 客户端.exe.config
- 异常处理程序.dll
- 实用程序.dll
- 服务器
- 服务器.exe
- 服务器.exe.config
- 异常处理程序.dll
由于引用的程序集都是相同的,我得到的是:
- 行政
- 管理员程序
- 管理员.exe.config
- 异常处理程序.dll
- 实用程序.dll
- 客户
- 客户端.exe
- 客户端.exe.config
- 服务器
- 服务器.exe
- 服务器.exe.config
当客户端或服务器找不到它所期望的两个 DLL 之一时,这会导致 FileNotFoundException。
我是否缺少设置属性以使其始终复制输出,即使它在另一个项目的输出中的其他地方重复?
再次编辑:所有引用的 DLL 都设置为“复制本地”,并且一直如此。我找到了一篇关于使用 NAnt 和 XSLT 获取文件列表的不错的文章,因此正如 neouser99 建议的那样,这也可能是一个可能的解决方案。
接受的解决方案:我几乎回到了我开始的地方。所有 .exe 和 .dll 输出都放在安装项目中的“bin”目录中,松散地打包。其他每个应用程序文件夹包含该目录中可执行文件的快捷方式。
现在的不同之处在于,我将向安装程序添加一个自定义操作以使用反射,枚举每个可执行输出的依赖项,并将 .exe 和 .dll 文件复制到单独的目录中。有点痛苦,因为我只是假设有一种方法可以通过一些设置库以编程方式检测将包含哪些文件。
.net - 如何使用参考程序集正确部署示例源?
我正在开发一个 .NET 类库以及一些示例源。因此,我的解决方案包括库、用于说明库的示例 VB 以及用于部署它的安装项目。
该示例对类库具有项目依赖关系,安装项目被配置为部署类库(即.NET 类库项目的输出)和 VB 应用程序的源代码。
问题是 VB 应用程序的 vbproj 文件包含项目依赖项(即它引用类库的 .csproj)。
我想要实现的是,当源代码部署在客户端机器上时,它是一个独立的项目,它依赖于(刚刚安装的)类库 DLL。
我怀疑我需要对 vbproj 文件进行一些安装后操作,但由于我是新手,我想知道这个(我会想到的)常见问题是否可以轻松处理?
TIA
.net - Web 设置项目 - 获取当前机器名称
我有一个 Web 设置项目,其中有一个自定义屏幕,要求输入机器名称。反正有没有用当前机器名称预填充这个字段?
对于我需要它来仅包含“Localhost”的情况不符合我的要求。
“Environment.MachineName”将在代码块中返回机器名称,如果我在自定义操作中需要它会很好。但似乎自定义操作在您完成安装向导之后才会执行......所以我实际上无法使用它。无论如何,让我知道你的想法。
c# - 应用程序在 Windows 启动时找不到 app.config 文件
最近,我在我的应用程序中添加了一个设置项目。在安装项目中,我向 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 键添加了一个注册表值,该值将在 Windows 启动时启动我的应用程序。当应用程序从该位置运行时,它会因 System.NullReference 异常而崩溃(它找不到我的 app.config 文件,该文件会在应用程序加载时在方法中读取)。我可以从开始菜单或已安装的文件夹完美地运行该应用程序。如何让我的应用程序在启动时运行?
visual-studio - 如何使用应用程序安装路径创建 Visual Studio 安装项目注册表值?
我有一个非常简单的应用程序安装程序,需要向所有文件的 shell 菜单(HKCR*\shell)添加一个操作,我遇到了障碍:如何将应用程序的安装路径插入注册表价值?我已经尝试了我能想到的一切:
[Path]
[ApplicationFolder]
[ApplicationPath]
[InstallPath]
[InstallRoot]
[InstallFolder]
[InstallTarget]
[TargetPath]
我什至尝试添加一个我知道在其他地方有效的 ( [Manufacturer]
) 以确保括号值语法在注册表中确实有效(确实如此)。
任何人都知道,或者至少有任何我没有尝试过的想法?
c# - VS 安装项目:将开始菜单链接添加到合并模块中的文件
我创建了一个新的 Visual Studio 安装项目,它使用另一个合并模块项目的输出。合并模块包含将安装到“x:\program files\\Documentation”中的文件。这些文件之一是“documentation.pdf”。我想在文档 PDF 中添加指向安装项目中开始菜单的链接。问题是安装项目不允许您“创建快捷方式”到实际不在安装项目中的文件。我看不到查看或链接到合并模块的方法。
我似乎也找不到一种方法来创建将在合并模块中重命名的通用智能菜单位置。例如,“Module Retargetable Folder”中的所有文件都将被重定向到“Installation Folder”。我想对开始菜单做同样的事情。
asp.net-mvc - 检查 MVC.net 是从 Web 安装项目安装的
有谁知道一种优雅的方式来检查目标机器上是否安装了 MVC.net 的 Web 设置项目(可能是前提条件?)?注册表是最好的方法吗?还是 Windows 安装程序搜索?
非常感谢,
c# - COM 互操作、隔离和排除重复引用
我们在我们编写的 C# dll (Assembly A) 中使用 Microsoft 提供的 COM DLL (dsofile.dll)。为了避免注册 COM dll,我已将 dsofile.dll 引用上的独立属性切换为 true。
这意味着当我们编译我们的 dll 时,Visual Studio 会将 dsofile.dll、Interop.DSOfile.dll 和 Native manifest 文件复制到我们解决方案的 bin 文件夹中,并且应用程序可以在没有注册 dsofile.dll 的情况下运行。
这种方法在一个小型测试应用程序中是成功的。
然而,在实际应用程序中,程序集 A 被我们的一些其他 dll(程序集 B 和程序集 C)和应用程序 EXE 引用。当本机清单文件和互操作 dll 被复制到应用程序的 bin 文件夹时,每个文件的不同副本被使用,因为每个引用我们的第一个 dll 的 dll 都会创建自己的副本。
这会导致文件的多个副本显示为安装项目中的引用(即来自 Assembly A、B 和 C 以及 EXE 文件夹的 dsofile.dll,来自 Assembly A、B 和 C 以及 EXE 文件夹的 Interop.DSOFile.dll, Native.Assembly A.manifest 来自 Assembly A、B 和 C 以及 EXE 文件夹)和编译器警告(“两个或多个对象具有相同的目标位置”)。
此外,如果复制到最终文件夹中的 manifest 和 interop dll 不是直接来自 Assembly A 文件夹(因为重复文件相互覆盖),则应用程序无法成功加载 COM DLL。
我被迫从设置依赖项中手动排除文件的重复副本,但是当重新加载或重建解决方案时它们会重新出现。
谁能提供更好的方法来实现 COM dll 的隔离部署?如果可能的话,我还想嵌入清单,但到目前为止我还没有成功。
作为替代方案,我一直在研究使用 EnvDTE for Visual Studio Automation 排除重复副本的任务的自动化,但无法发现如何以允许我识别和排除它们的方式访问检测到的依赖项节点。使用 UIHierarchyItem 界面访问它们会将安装项目的名称显示为每个文件的名称属性,并且没有排除选项。
任何意见,将不胜感激。
sql-server - 如何将自定义桌面应用程序数据库安装到 SQL Express?
我有一个 WPF 桌面应用程序,它使用自定义数据库进行存储。我需要准备一个设置项目(来自 Visual Studio 2008)(完整设置,而不是 ClickOnce)。
我可以将其添加到应用程序的先决条件列表中,并且它会在应用程序的设置过程中安装。
我的问题是:如何在安装过程中运行脚本来创建应用程序需要的数据库?或者如何在设置过程中将数据库恢复到客户端计算机?
另一个相关问题,如果客户端机器上已经存在会发生什么?如何检测实例名称和连接数据?然后如何能够(如果需要)更改实体框架用来连接到该数据库的连接字符串?
谢谢,埃德
visual-studio - 为什么在构建安装项目时出现“验证时出错。HRESULT = '80004005'”?
为什么在构建安装项目时出现以下错误?
验证时出错。HRESULT = '80004005'