首页 > 解决方案 > 如何在 Nuget 包中包含 resx 文件

问题描述

我有一个 .Net Framework 4.6.1 项目,我从中制作了一个 nuget 包。这个 nuget 包只安装了 2 个 dll 和几个工作正常的内容文件。

问题是我现在通过一个 resx 文件添加了资源字符串,该文件位于:

~\App_Data\Global\Resources\resource-strings.resx

而且我不知道如何使该文件正确地成为 nuget 包的一部分。当我创建 .nupkg 时,我在那里看到了 resx 文件,但是当我将它安装到另一个项目上时,resx 文件应该被复制到 App_Data\Global\Resources 文件夹,但事实并非如此。

可能吗?

根据我的调查,我认为我还必须对目标文件 + nuspec 配置做一些事情,但我没有尝试过任何工作。

我实际上只需要复制 resx 文件。没有比这更复杂的了。

标签: .netvisual-studionugetresourcesnuspec

解决方案


当然。这是可能的,并且可以通过 nuget 来完成。由于您希望将此资源文件复制到目标 asp net 项目文件夹中,因此可以尝试以下步骤:

==================================================== ===

首先,如果你想把这个net461nuget包安装到一个net frameworkasp net项目中,你应该在文件中使用内容节点xxx.nusepc

首先,确保 resource-strings.resx 的Build ActionEmbedded Resource而不是Content

1) 首先,运行cmd命令:cd xxxx(project folder path)然后运行nuget spec生成nuspec文件。这些就足够了:

2)打开nuspec文件并添加内容节点:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>xxx</id>
        <version>xxx</version>
        <title>xxx</title>
        <authors>xxx</authors>
        ............       
    </metadata>
    <files>
        <file src="~\App_Data\Global\Resources\resource-strings.resx(the path of the file in net framework 4.6.1 project)" target="content\App_Data\Global\Resources\resource-strings.resx" />
    </files>
</package>

3)然后保存nuspec文件并运行nuget pack以生成nupkg.

安装 nuget 包之前,您应该首先清理 nuget 缓存以删除旧的错误版本的 nuget。

安装此包时,该文件将被复制到App_Data\Global\Resources\resource-strings.resxWeb 项目的根路径中。

==================================================== ==

如果您想将此包安装到新的 sdk 项目(Net Core 或 xxx 与PackageReference nuget 管理格式),您应该创建一个带有复制任务的目标文件。

1)在net framework 4.6.1项目中添加一个名为build的文件夹,然后添加一个名为<Package_id>.propsfile的文件。

请注意,您应该确保 nuget 包的 id 与<Package_id>.props. 从这里提示

2)将这些添加到<Package_id>.props

  <Project>
      <Target Name="CopyFilesToProject" BeforeTargets="Build">
        <Message Text="Copy resource-strings.resx  to project" />
        <ItemGroup>
          <SourceScripts Include="$(MSBuildThisFileDirectory)..\content\**\*.*"/>
        </ItemGroup>
        <Copy
           SourceFiles="@(SourceScripts)"
           DestinationFiles="$(MSBuildProjectDirectory)\%(RecursiveDir)%(Filename)%(Extension)"/>
      </Target>
      
    </Project>

3)像这样修改xxx.nuspec文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>xxx</version>
    <title>xxx</title>
    <authors>xxx</authors>
    <owners>me</owners>
    ............
  </metadata>
 <files>
<file src="~\App_Data\Global\Resources\resource-strings.resx" target="content\App_Data\Global\Resources\resource-strings.resx" />
<file src="build\xxx(like package_id).props" target="build"/>
</files>

</package>

4)然后你应该使用nuget pack命令来打包这个项目。在安装此软件包之前,您应该首先清理 nuget 缓存。

安装此 nuget 包后,您应该构建项目以运行此自定义复制目标以将文件复制到您的主项目中。

此外,还有一个类似的问题


推荐阅读