我正在使用AppVeyor构建一个.net核心项目,并发布一个nuget包作为结果。我有一个指定的内容文件:
<ItemGroup>
<Content Include="ExchangeScripts\getMarket.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</Content>
</ItemGroup>
我希望它进入一个软件包,但是当我最终在应用程序中引用一个nuget软件包(来自AppVeyor的内部存储)时,我得到“找不到文件异常”。
是否有任何额外的步骤可以让我失踪?
答案 0 :(得分:0)
如果不确定nuget软件包中是否包含内容文件,则可以通过打开.nupkg
软件包文件并尝试找到要包含的内容文件来快速确认。根据{{3}}:
从技术上讲,NuGet软件包只是一个ZIP文件, 使用.nupkg扩展名重命名并且其内容与特定内容匹配 惯例。
由于您已将文件的构建操作设置为Content
(如上所示),因此您应该期望可以在content
和contentFiles
目录中找到该文件。 (供以后参考,您可能会有点了解nuget包的内部结构/约定很有用。)
一旦您确认内容文件已包含在软件包中,那么看来您只需要弄清楚如何访问该文件的内容即可。
如果您希望能够引用另一个项目中的Nuget包中包含的内容文件,则首先将Nuget包引用添加到新项目中。完成此操作后,您应该看到包中包含的内容文件出现在引用项目中。此时,您现在可以像往常一样设置生成操作和复制到输出目录选项,就像您已将这些文件直接添加到引用项目一样。
以下是使用Visual Studio 2017完成此操作的示例:
在上面的示例中,TestLib
是一个.net core 2.0类库,仅包含具有2个文件的目录。每个都有一个Build Action
的一个Content
和一个与其名称相对应的Copy to Output Directory
值。 nuget包是从TestLib
创建的,随后被ConsoleApp
项目引用。添加包引用后,Content
项目中的TestLib
目录(及其所有文件)将自动显示在ConsoleApp
项目中。但是,默认情况下,所有内容文件的Copy to Output Directory
选项都将设置为“不复制”,因此您可能希望根据上面的项目文件片段来更改此设置。
但是,如果您的要求不允许您更改引用项目中内容文件上的Copy to Output Directory
选项,并且希望将其默认设置为Always
而不是Never
,然后我将向您介绍,以了解如何实现这一目标。 (提示:如果尚未使用.nuspec
文件,则可以从.nupkg
文件中复制自动生成的文件,以用作起点。)
如果您想直接从Nuget包中访问内容文件,则可以自动执行从.nupkg
文件中提取内容文件并根据需要进行处理的过程。我认为这不是您想要的,但我想有人曾经想要这样做。
即使这没有给您您所要的答案,我也希望这有所帮助。