Я пытаюсь создать пакет NuGet, который можно добавить в проект .net 4.0 или 4.5. Фактические сборки, содержащиеся в пакете, все созданы для .net 3.5, все, кроме одной, которая создана для .net 4.0 — я не могу это контролировать, поэтому я должен использовать сборки «как есть».
Проект, над которым я работаю, нацелен на .net 4.5.2, и ему необходимо ссылаться на эти «устаревшие» сборки. Я включил «активацию устаревшей среды выполнения», указав в своем App.config следующее:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
Кажется, все это работает достаточно хорошо. Теперь я хочу упаковать свои «устаревшие» сборки в пакет NuGet. Мой файл .nuspec выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<!-- many lines elided for clarity -->
<references>
<group>
<reference file="NetFx35Assembly1.dll" />
<reference file="NetFx35Assembly2.dll" />
</group>
<group targetFramework=".NETFramework4.5.2" >
<reference file="NetFx40Assembly.dll" />
</group>
</references>
</metadata>
<files>
<!-- .net 3.5 assemblies -->
<file src="NetFx35Assembly1.dll" target="lib\net35\NetFx35Assembly1.dll" />
<file src="NetFx35Assembly2.dll" target="lib\net35\NetFx35Assembly2.dll" />
<!-- .net 4.0 assemblies -->
<file src="NetFx40Assembly.dll" target="lib\net40\NetFx40Assembly.dll" />
</files>
</package>
Я ожидал, что когда я добавлю этот пакет в свой проект .net 4.5.2, он сделает следующее:
- Ссылайтесь на сборки 3.5, потому что они находятся в группе «по умолчанию», в которой не указана какая-либо структура.
- Ссылка на сборку 4.0, так как она указана в группе, предназначенной для 4.5.2.
Все пошло не так, как я ожидал. На самом деле я получил единственную ссылку на сборку 4.0.
Как правильно создать поведение, которое я хочу? Как сделать так, чтобы пакет NuGet обеспечивал наличие тега <startup useLegacyV2RuntimeActivationPolicy="true">
в файле App.config?