NuGet包依赖于Visual C ++ 2013 Runtime

时间:2015-11-18 11:38:31

标签: c# c++ visual-c++ nuget nuget-package

我已经从.NET4.0 DLL创建了一个NuGet包,其中包含混合(托管和本机)代码。

Native代码打包在.NET4.0 DLL中,但依赖于Visual C++ 2013 Redistributable

我试图集体讨论如何使用NuGet包打包redist和/或警告用户他们需要它,但我正在画一个空白。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

我其实很善意解决这个问题。虽然我找不到将VCpp Runtime作为NuGet包依赖项的解决方案,但我找到了一个解决方案来警告用户需要Visual C ++ 2013 Runtime。

我在启动需要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包的开发人员需要安装运行时。