如何在 Nuget 包中包含 resx 文件
How to include resx file in a Nuget package
我有一个 .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 文件。没有比这更复杂的了。
当然。这是可能的,可以通过 nuget 来完成。由于您希望将此资源文件复制到您的目标 asp 网络项目文件夹中,您可以尝试以下步骤:
============================================= ========
首先,如果你想把这个net461
nuget包安装到net framework
asp net项目中,你应该使用content node 在 xxx.nusepc
文件中
首先,确保 resource-strings.resx 的 Build Action 是 Embedded Resource 而不是 内容.
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包之前,你应该先clean nuget caches删除旧的错误版本的nuget。
安装此包时,文件将被复制到 Web 项目的根路径 App_Data\Global\Resources\resource-strings.resx
。
============================================= =======
如果你想将这个包安装到新的 sdk 项目中(Net Core 或 xxx with PackageReference nuget 管理格式),你应该创建一个带有复制任务的目标文件。
1)在net framework 4.6.1项目中添加一个名为build的文件夹,然后添加一个名为<Package_id>.props
file.
的文件
注意您应该确保 nuget 包的 ID 与 <Package_id>.props
相同。 Hint from here.
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 包后,你应该 build 你的项目到 运行 这个自定义复制目标来复制文件到你的主项目中。
还有,关于这个还有
我有一个 .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 文件。没有比这更复杂的了。
当然。这是可能的,可以通过 nuget 来完成。由于您希望将此资源文件复制到您的目标 asp 网络项目文件夹中,您可以尝试以下步骤:
============================================= ========
首先,如果你想把这个net461
nuget包安装到net framework
asp net项目中,你应该使用content node 在 xxx.nusepc
文件中
首先,确保 resource-strings.resx 的 Build Action 是 Embedded Resource 而不是 内容.
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包之前,你应该先clean nuget caches删除旧的错误版本的nuget。
安装此包时,文件将被复制到 Web 项目的根路径 App_Data\Global\Resources\resource-strings.resx
。
============================================= =======
如果你想将这个包安装到新的 sdk 项目中(Net Core 或 xxx with PackageReference nuget 管理格式),你应该创建一个带有复制任务的目标文件。
1)在net framework 4.6.1项目中添加一个名为build的文件夹,然后添加一个名为<Package_id>.props
file.
注意您应该确保 nuget 包的 ID 与 <Package_id>.props
相同。 Hint from here.
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 包后,你应该 build 你的项目到 运行 这个自定义复制目标来复制文件到你的主项目中。
还有,关于这个还有