2

我在 .net core 2.2 上构建了由 Razor 类库 (RCL) 项目组成的NuGet包。打包后,我看到它包含我配置的静态资产:

包详细信息 - 示例资产

当我在目标项目中安装包时,资产引用在项目结构中可见: 在此处输入图像描述

但是当我尝试在运行时访问它们时 - 我得到 404: https://localhost:44312/localizer-assets/lib/vue/vue.min.js

我看到这些文件没有“物理”放置在 wwwroot 文件夹中(它们是 iniside 包文件夹)。

有没有办法提供这些文件?这应该如何配置?

到目前为止,我一直在使用这些方法:

https://www.learnrazorpages.com/advanced/razor-class-library

Razor 类库也可以打包静态文件(js、css 等)吗?

当我直接引用 RCL 项目时,它们工作正常,但是当与 NuGet 打包并安装时,它们不再工作了。

4

1 回答 1

3

当我直接引用 RCL 项目时,它们工作正常,但是当与 NuGet 打包并安装时,它们不再工作了。

据我所知,当您使用nuget并选择PackageReference nuget管理格式时,将要导入主项目的文件作为链接引入您的主项目(相应的文件不会存在于您的解决方案的物理路径中,但会链接到%userprofile%\.nuget\xxx中对应的文件地址)。它是 PackageReference nuget 管理格式的特点。

解决方案

为了解决它,我认为您可以在 nuget 项目中添加自定义构建目标(在包中包含 MSBuild 道具和目标)。有了它,您可以将 nuget 包中的文件复制到主项目中。

1.在项目的\build文件夹(必须在项目根目录下创建)添加一个像.targets或.props这样的目标文件(必须与包id相同)。所有这些都基于 nuget 打包机制。

2.将这些代码添加到目标文件中

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <SourceScriptFiles Include="$(MSBuildThisFileDirectory)..\content\xxxx(relative paths in the current project)" />
    </ItemGroup>
    <Target Name="CopyScriptsToProject" BeforeTargets="Build">
        <Copy SourceFiles="@(SourceScriptFiles)" DestinationFolder="$(ProjectDir)\wwwroot\xxxx\"
        />
    </Target>
</Project>

使用目标将文件复制@(SourceScriptFiles)到主项目中。(这DestinationFolder只是目标地址)。

3.如果你使用nuspec文件打包你的包。您还应该在其中的文件节点下添加这些文件。

<files>
        <!-- Include everything in \build -->
        <file src="build\**" target="build" />

        <!-- Other files -->
        <!-- ... -->
</files>

另外,这样的操作是预构建事件,当你安装包时,你应该先构建你的项目,然后你会在目标文件夹下找到文件。

此外,这里有一个很好的 github 示例,我希望它可以提供详细的信息和步骤。希望它可以帮助你。

于 2019-11-28T07:48:26.573 回答