NuGet包作为ASP.NET Core MVC项目中的链接安装的contentFiles工件

问题描述 投票:1回答:1

我们有一个内部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以外的软件包?

asp.net-core nuget asp.net-core-mvc nuget-package
1个回答
1
投票

contentFiles应该被添加为链接。 contentFiles部分控制为这些文件生成的msbuild项目到obj\projectname.csproj.nuget.g.props文件中。

copyToOutput="true"将导致项目被复制到输出和发布目录。但是,在开发期间运行应用程序时,这对您没有帮助,因为它将从项目目录而不是输出目录运行。

考虑consuming client libraries via npm(因为凉亭被弃用)。

© www.soinside.com 2019 - 2024. All rights reserved.