Re: Разные NuGet пакет(ы) для Debug и Release конфигураций в проекте - как?
От: Mr.Delphist  
Дата: 24.10.16 16:19
Оценка: 7 (2)
Здравствуйте, Mazenrab, Вы писали:

M>Имею следующую ситуацию: есть .NET проект (условно назовем Data). Этот проект развивался в рамках одного решения, теперь появилось второе решение в отдельном репзитории которое тоже должно использовать Data. Очевидное решение, как сначала показалось, в зависимости в виде NuGet-пакета. Благо билд-сервер есть, настроить сборки не проблема. И все бы хорошо, но Data зависит от одной нативной dll которая разная в Debug и Release-конфигурациях. И нам соответственно нужно чтобы в разных конфигах бралась соответствующая для каждого из решений.

M>В рамках одного решения мы это реализовываем просто: в Data.csproj воткнуто два <reference> с разными condition и в момент сборки все в шоколаде! А вот с пакетом так сделать нельзя. Конфигурации он не поддерживает насколько я понимаю

Совершенно случайно, думал сегодня об этом же в профилактических целях, и нагуглил (но ещё не проверял) что-то типа такого:

http://stackoverflow.com/a/30172491/1964969

You should be able to reference different assemblies based on the current build configuration by using either a PowerShell script or using custom MSBuild targets file. Note that using an MSBuild targets file will work cross platform in MonoDevelop and Xamarin Studio where as a PowerShell script will not.
NuGet allows you to include an MSBuild targets file so you can change what happens at build time. In the MSBuild targets file you can have the references and make them conditional based on the current build configuration.
In the build directory of your NuGet package you add an MSBuild .targets file with the same name as your NuGet package id. You can also have different .targets files for a particular target framework (e.g. Net40) by having it under a Net40 subdirectory if you need to.
build\MyPackageId.targets
Then in the MSBuild .targets file you can do something simple such as have the references conditionally added.

<ItemGroup Condition=" '$(Platform)' == 'x86' ">
    <Reference Include="MyAssembly">
      <HintPath>x86\MyAssembly.dll</HintPath>
    </Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
    <Reference Include="MyAssembly">
      <HintPath>x64\MyAssembly.dll</HintPath>
    </Reference>
</ItemGroup>

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.