Я создал пакет NuGet из DLL-библиотек .NET4.0, которые содержат смешанный (управляемый и собственный) код.
Собственный код упакован в .NET4.0 DLL, но зависит от Visual C ++ 2013 распространяемый
Я пытаюсь провести мозговой штурм, чтобы либо упаковать пакет с пакетом NuGet, и / или предупредить пользователя, что он им нужен, но я рисую пробел.
У кого-нибудь есть идеи?
Я на самом деле вроде как решил это сам. Хотя я не смог найти решение для включения среды выполнения VCpp в качестве зависимости от пакета NuGet, я нашел решение, предупреждающее пользователя о необходимости среды выполнения Visual C ++ 2013.
Я запускаю этот код один раз, статически, при запуске компонента / библиотеки, для которой требуется среда выполнения VC ++:
private static void AssertVcppDependencies()
{
var system32Path = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86);
var system64Path = Environment.GetFolderPath(Environment.SpecialFolder.System);
string platform = Environment.Is64BitProcess ? "x64 and x86" : "x86";
bool success = File.Exists(Path.Combine(system32Path, MSVCP120DllName));
if (Environment.Is64BitProcess)
{
success &= File.Exists(Path.Combine(system64Path, MSVCP120DllName));
}
if (!success)
{
throw new InvalidOperationException("This Application Requires the Visual C++ 2013 " + platform +
" Runtime to be installed on this computer. Please download and install it from https://www.microsoft.com/en-GB/download/details.aspx?id=40784");
}
}
Это должно предупредить всех разработчиков, использующих ваш пакет NuGet, о необходимости установки среды выполнения.
Других решений пока нет …