我们有一个内部JavaScript库,我们想在多个项目之间共享。实际上我们已经通过文件复制来共享它,但是这已经(可以预见地)产生了代码的多个分支。
消费项目是“完整”ASP.NET(MVC和Web窗体)和ASP.NET核心MVC的混合体。 (我打算创建两个独立的包。)
安装到ASP.NET项目似乎工作正常,但我遇到ASP.NET Core的问题。
最初我在files
元素中拥有所有工件,并且在消耗项目中什么都没有出现。重新阅读文档后,我意识到ASP.NET核心项目将使用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
元素...但include
元素上的files
属性是必需的,因此不清楚单个file
元素甚至会做什么。
有没有办法将实际文件(而不是链接)添加到消费项目中?或者,有没有办法让软件包安装为“普通”软件包(而不是PackageReference
)?
更新:我做了一些进一步挖掘并找到了this answer by @Martin to a similar question - 但是在我有机会更新之前他回答了这个问题。 看来这种行为(将文件添加为链接)是设计使然。
我发现这非常不令人满意,因为(正如@Martin指出的那样),我们的JavaScript库在开发消费项目时将无法使用。
但我的问题的第2部分仍然存在。根据the docs,
默认情况下,PackageReference用于.NET Core项目,.NET Standard项目和面向Windows 10 Build 15063(创建者更新)及更高版本的UWP项目。
有没有办法触发非默认行为,即允许.NET Core项目使用除PackageReference
以外的软件包?
contentFiles
应该被添加为链接。 contentFiles
部分控制为这些文件生成的msbuild项目到obj\projectname.csproj.nuget.g.props
文件中。
copyToOutput="true"
将导致项目被复制到输出和发布目录。但是,在开发期间运行应用程序时,这对您没有帮助,因为它将从项目目录而不是输出目录运行。
考虑consuming client libraries via npm
(因为凉亭被弃用)。