【发布时间】:2018-02-26 18:16:31
【问题描述】:
我们有一个内部 JavaScript 库,希望在多个项目之间共享。实际上我们已经通过文件复制来共享它,但这(可以预见)导致了代码的多个分支。
消费项目是“完整”的 ASP.NET(MVC 和 Web 窗体)和 ASP.NET Core MVC 的混合体。 (我打算创建两个单独的包。)
安装到 ASP.NET 项目中似乎可以正常工作,但我在使用 ASP.NET Core 时遇到问题。
最初,我将所有工件都放在 files 元素中,而消费项目中根本没有出现任何内容。重新阅读文档后,我意识到 ASP.NET Core 项目将使用 PackageReference ...所以我必须使用 contentFiles 元素而不是(或除了)files 元素。
我创建了一个 contentFiles 文件夹和一个脚本,用于将所需文件从源项目文件夹结构复制到 contentFiles/any/any/wwwroot/lib/ourAwesomeWidget,并相应地修改了包清单。
这行得通。有点。该软件包似乎可以正确构建。这些文件确实被添加到消费项目中,但它们被添加为链接;实际文件(链接目标)驻留在我的本地包缓存中。
包清单的相关部分是:
<metadata minClientVersion="3.3">
...
<contentFiles>
<files include="**/*" buildAction="Content"
copyToOutput="true" flatten="false" />
</contentFiles>
</metadata>
<files>
<file src="contentFiles\**" target="contentFiles" />
</files>
部分问题是我发现有关contentFiles 的文档不是很清楚。所有示例都显示了单个 file 元素......但 files 元素上的 include 属性是必需的,因此不清楚单个 file 元素甚至会做什么。
有没有办法将实际文件(不是链接)添加到消费项目中?或者,有没有办法让包安装为“普通”包(而不是PackageReference)?
更新:
我做了一些进一步的挖掘,找到了this answer by @Martin to a similar question——但他在我有机会更新之前回答了这个问题。
这种行为(将文件添加为链接)似乎是设计使然。
我觉得这非常不令人满意,因为(正如@Martin 指出的那样),我们的 JavaScript 库在消费项目的开发过程中将不可用。
但我的问题的第 2 部分仍然有效。根据the docs,
默认情况下,PackageReference 用于面向 Windows 10 Build 15063(Creators Update)及更高版本的 .NET Core 项目、.NET Standard 项目和 UWP 项目。
有没有办法触发非默认行为,即允许 .NET Core 项目通过 PackageReference 以外的方式使用包?
【问题讨论】:
标签: asp.net-core nuget asp.net-core-mvc nuget-package