如果您有一个 Web 应用合并模块和一个 exe 合并模块包含在同一个设置部署项目中,则每个合并模块的自定义操作中的 Context.Parameters["AssemblyPath"] 值会变得混乱。尝试创建一个包含 web 项目和应用程序项目的 setup-deployment 项目,如下所示:
- 创建一个 Web 项目
- 为该 Web 项目创建一个合并模块
- 创建一个常规的 App 项目
- 为该应用创建合并模块
- 创建一个包含上述两个合并模块的安装项目
- 为自定义安装程序创建一个项目。
- 在 Commit() 方法覆盖中,访问 Context.Parameters["AssemblyPath"] 并调试打印出值。
- 将此自定义操作项目输出添加到您的两个合并模块。现在进行安装。根据调用此自定义操作的合并模块,您会期望打印不同的值。但他们是一样的!有时是 c:\inetpub\wwwroot 有时是 C:\MyAppDir...
不过,合并模块文件确实在正确的位置结束:
Web 项目内容进入 C:\Inetpub\wwwroot\
,而 App 项目进入“模块可重定向文件夹”。
您还会注意到每个合并模块中包含的 customactions.dll 最终会出现在正确的位置(在一个情况下是 c:\inetpub\wwwroot\,在另一个情况下是“模块可重定向文件夹”)。
但是 Context.Parameters["AssemblyPath"] 的调试打印将在两种情况下(即两个合并模块)显示相同的值。它都是 C:\Inetpub\wwwroot\CustomActions.dll 或<targetdir>
\CustomActions.dll。这是错误的!
当调试打印来自基于 Web 项目的合并模块
时,调试打印应该显示C:\Inetpub\wwwroot\CustomActions.dll,当调试打印来自基于<targetdir>
应用项目的合并模块时,应该显示 \CustomActions.dll。
有人知道为什么每个合并模块的值没有更新吗?这是 Microsoft VS 中的错误吗?