Можно ли исключить из базы данных языки Microsoft.Data.OData?
Клиент Azure Storage 2.0 для С# использует библиотеку Microsoft.Data.OData.
Проблема в том, что при сборке я найду в своей папке сборки:
bin/de/Microsoft.Data.Edm.resources.dll
bin/de/Microsoft.Data.OData.resources.dll
bin/de/Microsoft.Data.Services.Client.resources.dll
bin/de/System.Spatial.resources.dll
bin/es/Microsoft.Data.Edm.resources.dll
bin/es/Microsoft.Data.OData.resources.dll
bin/es/Microsoft.Data.Services.Client.resources.dll
bin/es/System.Spatial.resources.dll
и т.д. для языков de, es, fr, it, ja, ko, ru, zh дважды
Это составляет около 3,2 Мо, я думаю, бесполезная библиотека в пакете, который я отправляю в Azure Cloud Instance. Мне нравится, чтобы мои пакеты были максимально легкими для быстрого отправки.
Мое приложение настроено на работу с культурой по умолчанию и культурой FR-FR
Безопасно ли исключить все другие языки и КАК я могу добиться этого исключения при сборке?
Вот мой webconfig
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Ответы
Ответ 1
Одна вещь, которую вы можете сделать, это изменить ваш файл .csproj
, подключиться к событию AfterBuild
, а затем удалить папки для всех, кроме нужного языка. Не оптимальный, но он должен работать. Что-то вроде:
<Target Name="AfterBuild">
<ItemGroup>
<DirsToClean Include="$(OutDir)\de;$(OutDir)\es;..." />
</ItemGroup>
<RemoveDir Directories="@(DirsToClean)" />
</Target>
Как безопасно ли исключать... нет идеи.:)
Ответ 2
Вот такой подход, который вы можете попробовать. Ресурсы, о которых вы говорите, являются частью решения и вывода, поскольку они являются частью пакетов Nuget, на которые имеются ссылки. В частности, они:
- Microsoft.Data.OData 5.2.0
- Microsoft.Data.Edm 5.2.0
- System.Spatial 5.2.0
Я не уверен, насколько актуальны версии для этой темы, но я создал новое веб-приложение ASP.NET MVC 4.5 и добавил пакет Windows Azure Storage 2.0, и они были установлены в результате.
Теперь есть инструмент с открытым исходным кодом под названием Nuget Package Explorer: http://npe.codeplex.com/
С помощью NPE вы можете открывать, просматривать и редактировать пакеты Nuget. Вы найдете папку, содержащую эти пакеты в каталоге packages
, в том же относительном пути, в котором находится ваше решение.
Вам нужно отредактировать пакет с NPE и удалить ссылки на файлы ресурсов там и сохранить пакет. Вам также необходимо удалить фактические сборки ресурсов из папки packages
.
Вы должны иметь возможность выполнять Clean Solution...
и Rebuild Solution
и видеть компиляцию программного обеспечения без этих ссылок.
Этот метод существенно корректирует конфигурацию ваших зависимостей, чтобы повлиять на вывод сборки.
Ответ 3
Не обязательно хранить каждую версию. Эти классы имен DLL для каждого языка.
Что касается вашей сборки, вы должны обратить внимание на конфигурацию вашей XML-культуры (web.config):
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>