【发布时间】:2017-01-25 16:40:46
【问题描述】:
我有一个包含 3 个项目的 Visual Studio 2015 Update 3 解决方案:
我的顶级应用程序是MyApp,它在ClassLibrary2 上有一个项目引用,而在ClassLibrary1 上有一个项目引用:
MyApp -> ClassLibrary2 -> ClassLibrary1
ClassLibrary1 有一个数据文件data.bin,这是其正常执行所必需的。预计该数据文件将在相对于ClassLibrary1 程序集执行应用程序所在位置的Resources/ 子文件夹中找到。 ClassLibrary1 的结构类似于:
ClassLibrary1.csproj
Resources/
data.bin
MyClassBehaviorDrivenByData.cs
...
data.bin 文件将其Build Action 属性设置为Content(我也尝试使用None)并将其Copy to Output Directory 设置为Copy If Newer。
如果我执行完整的解决方案重建,data.bin 文件会按预期找到MyApp 的输出目录。但是,如果我在MyApp 项目中进行一些更改并构建解决方案,data.bin 文件将从MyApp 的输出目录中删除(注意:输出窗口显示只有@ 987654342@ 是构建的,因为只更改了MyApp 的代码。
解决方法:
-
每次
MyApp构建时,我可以使用MyApp中的构建后步骤将数据文件强制复制到输出目录。但是,这违背了“拥有”ClassLibrary1的开发人员在添加新数据文件、修改现有数据文件或将其移至其他位置时不必担心在消费项目中修改构建后脚本的原则。 我可以直接从
MyApp添加对ClassLibrary1的引用。但是,这违反了在ClassLibrary2API 下隐藏ClassLibrary1功能/API 的愿望(即,我不希望ClassLibrary1API 泄漏到MyApp)。
我的问题是:在MyApp 的增量构建期间,是什么导致data.bin 文件从MyApp 的输出目录中删除,有没有办法在不使用列出的两种解决方法之一的情况下防止这种情况发生上面?
【问题讨论】:
-
在您的输出窗口中,它构建了多少个项目? ClassLibrary1 和 2 是否也构建成功?在构建MyApp之前,如果先构建classlibrary项目,会不会有这个问题?
-
@JackZhai ClassLibrary1、ClassLibrary2 以及 MyApp 在我重建整个解决方案时都成功构建(并且 data.bin 出现在 MyApp 输出目录下的某处)。但是,一旦构建了所有内容并且我破解了 MyApp 然后 Build 解决方案,只有 MyApp 显示在输出窗口中(这是我所期望的,因为我只编辑 MyApp 的代码)。显然,每次修改 MyApp 中的代码时,我都可以重新构建解决方案,但这是一个大型解决方案,完全重新构建是不切实际的。我编辑了这个问题以进一步澄清这一点。
-
你试试我的解决方法吗?
标签: c# visual-studio-2015 build msbuild