Опустить локализованные версии сборок из сборки

В одном из моих проектов я использую потрясающую библиотеку под названием Humanizer. Эта библиотека поставляется во многих языковых вариациях (я посчитал 38).

Когда я создаю свой проект, я вижу все эти папки как "af", "ar", "bg", "bn-BD",..., "zh-Hant" с сборками, содержащими локализованные ресурсы для этой библиотеки.

Моя проблема заключается в том, что мой проект только по-английски, и я не заинтересован в том, чтобы все эти локализованные сборки были в моем выпуске сборки. Есть ли хороший способ убрать их из сборки?

Я ищу общие решения этой проблемы. Это происходит с библиотеками, отличными от Humanizer, такими как DevExpress Controls и т.д., Которые не являются open-source.

Ответ 1

Что вы можете сделать, так это добавить цель (здесь я назвал ее "RemoveSatelliteAssemblies") в файле проекта msbuild.csproj, например, в конце:

<Project...>
  ....
  <Target Name="RemoveSatelliteAssemblies" AfterTargets="ResolveAssemblyReferences">
    <ItemGroup>
        <ReferenceCopyLocalPaths Remove="@(ReferenceSatellitePaths)" />
    </ItemGroup>
  </Target>
</Project>

Эта цель будет запущена после стандартного ResolveAssemblyReferences объекта ResolveAssemblyReferences (определенного в файле Microsoft.Common[something].targets каталоге C:\Program Files (x86)\MSBuild или в каталоге C:\Windows\Microsoft.Net - это зависит от ваших установок и версий Visual Studio/MsBuild), и он удалит все опорные спутниковые пути из списка ссылок, помеченных как скопировать локально (оба названия ItemGroup также объявлены в стандартном файле.targets).