在构建时将文件包含在 NuGet 包中,仅当文件不存在时
Include File in NuGet package on Build, only if it does not exist
前段时间我问了这个问题:
这个问题的答案已经让我完成了我想去的大部分事情,但问题是在我的项目中重建或更新 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
的文件夹,其中复制了一堆 default JSON 包含来自我的 NuGet 包的 PageSettings 的文件。笔记;这些文件最初作为链接文件出现在 Visual Studio 中。在构建项目之前,它们不会实际上 复制到目录中。
但是,这些 PageSettings 文件的目的是为我的 NuGet 包的用户提供默认的 PageSettings,或者如果您喜欢示例的话。安装后,用户可以而且应该更改这些 .JSON 文件,因此现在当他们的项目被重建时,或者如果他们安装的 NuGet 包有可用的更新,这些 JSON 文件不应该update/install.
当然可以。我的回答相当有缺陷。为防止覆盖现有文件和已更改的文件,我建议您使用 xcopy
和 /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 缓存。
前段时间我问了这个问题:
这个问题的答案已经让我完成了我想去的大部分事情,但问题是在我的项目中重建或更新 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
的文件夹,其中复制了一堆 default JSON 包含来自我的 NuGet 包的 PageSettings 的文件。笔记;这些文件最初作为链接文件出现在 Visual Studio 中。在构建项目之前,它们不会实际上 复制到目录中。
但是,这些 PageSettings 文件的目的是为我的 NuGet 包的用户提供默认的 PageSettings,或者如果您喜欢示例的话。安装后,用户可以而且应该更改这些 .JSON 文件,因此现在当他们的项目被重建时,或者如果他们安装的 NuGet 包有可用的更新,这些 JSON 文件不应该update/install.
当然可以。我的回答相当有缺陷。为防止覆盖现有文件和已更改的文件,我建议您使用 xcopy
和 /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 缓存。