Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 微软可再发行软件包_Visual Studio_Redistributable - Fatal编程技术网

Visual studio 微软可再发行软件包

Visual studio 微软可再发行软件包,visual-studio,redistributable,Visual Studio,Redistributable,我正在开发一个使用2个库的软件。 这两个库都使用VS2005,并且都需要VS2005 redist包。 但是,他们的redist包的版本不同。 因此,关于安装redists,我有几个问题 1) 我可以毫无问题地安装新版本吗? 2) 如果我安装这两个redist,Windows如何知道哪个库正在使用哪个redist 感谢从XP开始,DLL(或可以)安装在Windows并行缓存中(事实上,VS2005 DLL坚持在并行缓存中找到;否则它们拒绝运行) 在Windows并行缓存(可在C:\Windows

我正在开发一个使用2个库的软件。 这两个库都使用VS2005,并且都需要VS2005 redist包。 但是,他们的redist包的版本不同。 因此,关于安装redists,我有几个问题

1) 我可以毫无问题地安装新版本吗? 2) 如果我安装这两个redist,Windows如何知道哪个库正在使用哪个redist


感谢从XP开始,DLL(或可以)安装在Windows并行缓存中(事实上,VS2005 DLL坚持在并行缓存中找到;否则它们拒绝运行)

在Windows并行缓存(可在C:\Windows\WINSxS中找到)中,DLL放在子文件夹中,由名称和版本标识。这样,就可以并行安装多个版本的DLL

如果编译Visual Studio应用程序,编译器将告诉链接器它应该生成清单文件。然后可以使用MT命令在可执行文件或DLL中链接此清单文件

此清单文件包含与前面所述相同的版本号,Windows将在加载可执行文件或DLL时使用此信息查找要加载的DLL

在您的问题中,不清楚您使用的两个库是DLL库还是LIB库。 如果它们是DLL的,则使用上述系统,您可能不会遇到任何问题。 您仍然可以尝试安装较新的版本,但如果Windows抱怨,也可以安全地安装较旧的版本

然而,如果您正在使用LIB,您可能会遇到麻烦。无法指示每个库要使用的DLL。可执行文件只能引用一个DLL(实际上是DLL的一个版本),而不能引用两个

在这种情况下,您可以检查并行缓存中的策略。您可以在C:\WINDOWS\WINSxS\Policys)中找到。每个组件都有一个子文件夹,文件夹中有策略文件。策略文件可以指定重定向,因此如果应用程序需要版本X,策略可以包含同样允许版本Y的信息

以下是策略文件的示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.ATL" version="8.0.50727.4053" processorArchitecture="amd64    " publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC80.ATL" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"    />
            <bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.4053"/>
             <bindingRedirect oldVersion="8.0.50727.42-8.0.50727.4053" newVersion="8.0.50727.4053"/>
        </dependentAssembly>
    </dependency>

</assembly>


有关更多详细信息,请查看MSDN以获取有关并排缓存以及如何使用清单文件的信息。

从XP开始,DLL安装(或可以安装)在Windows并排缓存中(事实上,VS2005 DLL坚持在并排缓存中找到;否则它们拒绝运行)

在Windows并行缓存(可在C:\Windows\WINSxS中找到)中,DLL放在子文件夹中,由名称和版本标识。这样,就可以并行安装多个版本的DLL

如果编译Visual Studio应用程序,编译器将告诉链接器它应该生成清单文件。然后可以使用MT命令在可执行文件或DLL中链接此清单文件

此清单文件包含与前面所述相同的版本号,Windows将在加载可执行文件或DLL时使用此信息查找要加载的DLL

在您的问题中,不清楚您使用的两个库是DLL库还是LIB库。 如果它们是DLL的,则使用上述系统,您可能不会遇到任何问题。 您仍然可以尝试安装较新的版本,但如果Windows抱怨,也可以安全地安装较旧的版本

然而,如果您正在使用LIB,您可能会遇到麻烦。无法指示每个库要使用的DLL。可执行文件只能引用一个DLL(实际上是DLL的一个版本),而不能引用两个

在这种情况下,您可以检查并行缓存中的策略。您可以在C:\WINDOWS\WINSxS\Policys)中找到。每个组件都有一个子文件夹,文件夹中有策略文件。策略文件可以指定重定向,因此如果应用程序需要版本X,策略可以包含同样允许版本Y的信息

以下是策略文件的示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.ATL" version="8.0.50727.4053" processorArchitecture="amd64    " publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC80.ATL" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"    />
            <bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.4053"/>
             <bindingRedirect oldVersion="8.0.50727.42-8.0.50727.4053" newVersion="8.0.50727.4053"/>
        </dependentAssembly>
    </dependency>

</assembly>

有关更多详细信息,请查看MSDN以获取有关并排缓存以及如何使用清单文件的信息