Nugetパッケージにresxファイルを含める方法

Aug 19 2020

nugetパッケージを作成する.NetFramework4.6.1プロジェクトがあります。このnugetパッケージは、2つのdllといくつかのコンテンツファイルをインストールするだけで、正常に機能します。

問題は、次の場所にあるresxファイルを介してリソース文字列を追加したことです。

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

そして、そのファイルをnugetパッケージの一部にする方法がわかりません。.nu​​pkgを作成すると、そこにresxファイルが表示されますが、別のプロジェクトにインストールすると、resxファイルはApp_Data \ Global \ Resourcesフォルダーにコピーされますが、そうではありません。

出来ますか?

私が調査したことから、私もターゲットファイルとnuspec configで何かをしなければならないと思いますが、私が試したことは何も機能しません。

文字通り、resxファイルをコピーする必要があります。それ以上に複雑なことはありません。

回答

PerryQian-MSFT Aug 20 2020 at 06:02

確かに。それは可能であり、nugetによって実行できます。このリソースファイルをターゲットのaspnetプロジェクトフォルダーにコピーする必要があるため、次の手順を試すことができます。

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

まず、このnet461nugetパッケージをnet frameworkasp netプロジェクトにインストールする場合は、ファイル内のコンテンツノードを使用する必要がありxxx.nusepcます

まず、resource-strings.resxのビルドアクションコンテンツではなく埋め込みリソースであることを確認します。

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またはPackageReference nuget管理形式のxxx )にインストールする場合は、コピータスクを使用してターゲットファイルを作成する必要があります。

1) net Framework 4.6.1プロジェクトにbuildというフォルダーを追加してから、fileという<Package_id>.propsファイルを追加します。

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パッケージをインストールし、あなたがすべき構築し、あなたのメインのプロジェクトにファイルをコピーするには、このカスタムコピーターゲットを実行するためのプロジェクトを。

また、これについても同様の問題があります。