Как включить файл resx в пакет Nuget

Aug 19 2020

У меня есть проект .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. Нет ничего сложнее этого.

Ответы

PerryQian-MSFT Aug 20 2020 at 06:02

Конечно . Это возможно и можно сделать с помощью nuget. Поскольку вы хотите, чтобы этот файл ресурсов был скопирован в папку целевого проекта asp net, вы можете попробовать следующие шаги:

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

Во-первых , если вы хотите установить этот net461пакет nuget в проект 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.resxвеб-проекта.

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

Если вы хотите установить этот пакет в новый проект sdk (Net Core или xxx с форматом управления nuget PackageReference ), вы можете создать целевой файл с задачей копирования.

1) добавьте папку с именем build в проект net framework 4.6.1, а затем добавьте файл с именем <Package_id>.propsfile.

Обратите внимание : вы должны убедиться, что идентификатор пакета nuget совпадает с идентификатором <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 вы должны создать свой проект для запуска этой настраиваемой целевой копии, чтобы скопировать файл в основной проект.

Также есть похожая проблема по этому поводу.