【问题标题】:Include XML file from package when using "Publish Web"使用“发布 Web”时从包中包含 XML 文件
【发布时间】:2017-05-15 06:29:29
【问题描述】:

我有一个依赖于 NuGet 包的 Web API 项目。此包包含一个 XML 文件,我的应用程序在运行时引用该文件。

当我构建解决方案并从 Visual Studio 以调试模式运行时,文件被复制到 \bin,应用程序运行没有问题。

当我发布应用程序时,该文件没有被复制到最终输出中,我可以看到它从未被复制到 \obj 文件夹中。

虽然我已经将文件引用直接添加到 \packages 文件夹中的包中,但是每当更新包版本时,这都会中断。

如何指定在部署时应复制文件?

【问题讨论】:

  • 您可以使用Resource 为属性Build actionAlways copyCopy in output directory 将文件添加到您的项目中
  • 关键是一旦更新包,文件就会消失,因为 \packages 文件夹中的 NuGet 包是根据它们的版本命名的。
  • 版本号可以使用wildcards

标签: visual-studio msbuild csproj


【解决方案1】:

我是根据this blogpost算出来的。

我在 .csproj 文件的末尾添加了以下内容:

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
            CustomCollectFiles;
            $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>


<Target Name="CustomCollectFiles">
    <Message Text="=== CustomCollectFiles ===" Importance="high" />
    <ItemGroup>
        <_CustomFiles Include="..\Packages\**\*PackageName.*.xml*" />
        <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
        </FilesForPackagingFromProject>
    </ItemGroup>
</Target>

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以将其标记为答案,这样可以帮助遇到相同问题的其他社区成员。
  • 我会的,但在宽限期之前我不能接受自己的答案。在撰写本文时,还有 18 小时。
  • 由于某些原因,MS 将“CopyAllFilesToSingleFolderForPackageDependsOn”更改为“CopyAllFilesToSingleFolderForMSDeployDependsOn”...参见:dotnetcatch.com/2016/07/20/…@PetterBrodin:也许您希望更新您的答案。感谢您帮助我解决了类似的问题。
  • @Aaginor,你知道这会影响哪些版本吗?
  • 我唯一的来源是链接的博客,这帮助我修复了无法正常工作的代码。我使用VS2019。我猜这个变化是在 2016 年的某个地方引入的
【解决方案2】:

Petter Brodins 的回答几乎对我有用。而且由于我是 Stackoverflow 评论的新手,我无法添加评论。为了让它工作,我将包含更改为“..\Packages*\lib*.xml”。但这是一个救命稻草,因为我写了很多文档并且无法将其用于我的招摇实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2015-03-09
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多