Fre*_*dpo 5 c# msbuild build visual-studio-2015
我有一个包含 3 个项目的 Visual Studio 2015 Update 3 解决方案:
我的顶级应用程序MyApp
有一个项目参考,ClassLibrary2
而项目参考又在ClassLibrary1
:
MyApp -> ClassLibrary2 -> ClassLibrary1
Run Code Online (Sandbox Code Playgroud)
该ClassLibrary1
有一个数据文件,data.bin
即要求其正常运行。预计该数据文件将位于与执行应用程序时程序集Resources/
所在位置相关的子文件夹中ClassLibrary1
。的结构ClassLibrary1
类似于:
ClassLibrary1.csproj
Resources/
data.bin
MyClassBehaviorDrivenByData.cs
...
Run Code Online (Sandbox Code Playgroud)
该data.bin
文件的Build Action
属性设置为Content
(我也尝试过None
)并将其Copy to Output Directory
设置为Copy If Newer
.
如果我做一个完整的解决方案重建,data.bin
文件会MyApp
按预期找到它的输出目录。但是,如果我对MyApp
项目进行一些更改并构建解决方案,data.bin
则会从输出目录中删除该文件MyApp
(注意:输出窗口显示仅MyApp
构建,因为仅MyApp
更改了 的代码)。
解决方法:
我可以使用 post-build 步骤MyApp
每次将数据文件强制复制到输出目录MyApp
构建时,。但是,这违背了“拥有”开发人员ClassLibrary1
如果添加新数据文件、修改现有数据文件或将它们移动到其他地方,则不必担心修改消费项目中的构建后脚本的原则。
我可以直接添加对ClassLibrary1
from的引用MyApp
。然而,这违反了在ClassLibrary1
API 下隐藏功能/API的愿望ClassLibrary2
(即,我不希望ClassLibrary1
API 泄漏到MyApp
)。
我的问题是:是什么导致data.bin
文件MyApp
在增量构建期间从的输出目录中删除,MyApp
有没有办法在不使用上面列出的两种解决方法之一的情况下防止这种情况发生?
原因是该文件在增量清理任务中被删除,该任务用于确保文件是最新的(但它只是删除您场景中的文件)。为了解决这个问题,您可以添加一个新目标,将必要的文件复制到目标文件夹中。
例如(编辑 csproj 文件,将此代码添加到末尾(之前):
<ItemGroup>
<resourceFiles Include="..\ClassLibrary1\Resources\*.*"/>
</ItemGroup>
<Target Name="AfterBuild" DependsOnTargets="CopyFiles">
</Target>
<Target Name="CopyFiles" Inputs="@(resourceFiles)"
Outputs="@(resourceFiles->'bin\$(Configuration)\Resources\%(filename)%(extension)')">
<Message Text="after Copy files" Importance="high"/>
<Copy
SourceFiles="@(resourceFiles)"
DestinationFolder="bin\$(Configuration)\Resources"
/>
</Target>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1398 次 |
最近记录: |