Visual Studio 2013 Web部署项目排除文件夹至MSI失败问题
解决VS2013中MSI安装包排除整个文件夹的问题
我之前也踩过这个坑,VS2013的安装项目里用ExcludeFilter有时候确实会出现路径匹配不生效的情况,给你几个亲测有效的解决办法:
方法一:手动编辑安装项目的.vdproj文件(最可靠)
VS的安装项目本质是基于.vdproj配置文件运行的,直接修改这个文件能精准控制要排除的内容:
- 先关闭Visual Studio,找到你的安装项目对应的
.vdproj文件,用记事本或VS Code打开。 - 找到对应
来自XXX(活动)的内容文件的节点,通常是类似<FileGroup Name="ContentFilesFromXXX(Active)">的区块。 - 在这个区块里,找到所有路径包含
\Test\TimerWorker\1\的<File>条目,直接删除这些行;如果要排除整个文件夹的所有内容,删掉该文件夹下所有对应的文件节点即可。 - 保存文件后重新打开VS加载项目,这些文件就不会被打包进MSI了。
方法二:从源项目控制文件输出
如果要排除的文件来自你的业务项目(不是安装项目),可以先在源项目里调整文件属性:
- 打开你的业务项目,定位到
Test\TimerWorker\1文件夹下的所有文件。 - 选中这些文件,在右侧属性窗口里把复制到输出目录改成
不复制。 - 重新生成业务项目,回到安装项目,右键点击
来自XXX(活动)的内容文件选择"刷新",这些文件就不会被同步到安装项目中了。
方法三:修正ExcludeFilter的路径格式
你之前用的路径格式可能不对,VS2013的ExcludeFilter需要使用相对路径(相对于内容文件的源根目录),不能带开头的反斜杠:
- 选中安装项目里的
来自XXX(活动)的内容文件项,在属性窗口找到ExcludeFilter,点击编辑按钮(...)。 - 添加以下规则:
- 排除
Test\TimerWorker\1下的所有文件:Test\TimerWorker\1\* - 排除该文件夹及所有子内容:
Test\TimerWorker\1\**
- 排除
- 确定后重新生成安装项目,应该就能生效了。
如果还是不行,试试清理整个解决方案(菜单→生成→清理解决方案),然后删除安装项目的obj文件夹再重新生成,有时候缓存会导致筛选规则不生效。
内容的提问来源于stack exchange,提问作者vbguyny




