visual-studio - 在构建时在 NuGet 包中包含文件,仅当它不存在时
问题描述
前段时间我问了这个问题:
在 NuGet 包中包含一个文件夹并将其作为文件 .netcore/Razor 安装到项目中
答案让我大部分时间都想去,但问题是在我的项目中重建或更新 NuGet 包现在覆盖用户可编辑的文件。
我觉得答案在 .props 文件中的某个地方,但我不确定如何实现它:
<Project>
<Target Name="CopyFiles" BeforeTargets="Build" >
<ItemGroup>
<File Include="$(MSBuildThisFileDirectory)..\Pagesettings\*.*"></File>
</ItemGroup>
<Copy SourceFiles="@(File)" DestinationFolder="$(ProjectDir)Pagesettings"></Copy>
</Target>
</Project>
该Target
标签有一个可选属性Condition
。我猜这可以以某种方式使用......?
所以,为了澄清我的问题:
从上面链接的原始问题中,我有一个 NuGet 包,下载该包时会创建一个名为 的文件夹PageSettings
,其中会复制一堆包含来自我的 NuGet 包的 PageSettings的默认JSON 文件。笔记; 这些文件最初在 Visual Studio 中显示为链接文件。在构建项目之前,它们实际上不会被复制到目录中。
但是,这些 PageSettings 文件的目的是作为我的 NuGet 包用户的 PageSettings 的默认值,或者如果您喜欢示例。安装后,用户可以并且应该更改这些 .JSON 文件,因此现在当他们的项目被重建时,或者如果他们安装的 NuGet 包有更新,这些 JSON 文件不应该更新/安装。
解决方案
当然。我的回答确实有一些缺陷。为防止覆盖现有文件和已更改的文件,建议您使用xcopy
with /d
。它不会覆盖现有文件。
相反,在test.props
文件中使用它:
<Project>
<Target Name="CopyFiles" BeforeTargets="Build">
<ItemGroup>
<File Include="$(MSBuildThisFileDirectory)..\Pagesettings\*.*"></File>
</ItemGroup>
<Exec Command="xcopy /s/d/y @(File) $(ProjectDir)Pagesettings\"></Exec>
<!--<Copy SourceFiles="@(File)" DestinationFolder="$(PorojectDir)Pagesettings" Condition="!Exists('$(PorojectDir)Pagesettings\*.*')"></Copy>-->
</Target>
</Project>
然后,重新打包您的 nuget 项目。在使用这个新的之前,请先清理 nuget 缓存。
推荐阅读
- android - 以编程方式测试设备指纹是否正常工作
- angular - 离子菜单链接只能使用一次
- laravel - 未定义的变量项目
- c++ - Conda Build 打包 C++ 项目失败
- django - Django - 使用 forms.CheckboxSelectMultiple
- android-studio - 如何从项目中创建 .Jar 文件?Gradle 和 Android Studio
- angular - 变量值未在服务中更新
- android - Android Studio:Webview 上的横幅广告
- javascript - 将函数的结果压入一个空数组
- c - 此代码中 pen 和 *pen 之间的区别