安装了 VS2008 SP1 后每次打开"工具箱"都会提示:
包加载失败
未能正确加载包"Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage, Microsoft.Data.Entity.Design.Package, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"( GUID = {8889E051-B7F9-4781-BB33-2A36A9BDB3A5} )。请与包供应商联系以获得帮助。由于可能会发生环境损坏,建议重新启动应用程序。要禁止将来加载此包吗? 可以使用"devenv /resetskippkgs"重新启用包加载。
按照提示使用 "devenv /resetskippkgs" 自然是毫无效果。网上出现的"包加载失败"错误多是不同语言环境造成的问题,而这个错误显然不是这个问题。
漫长的探索、重装过程就不说了,解决方法是 Visual Studio 在安装的时候需要勾选上组件 Visual Web Developer ,我估计问题是因为 SP1 的安装时不管三七二十一,直接全部安装,而没有判断之前 Visual Studio 2008 安装时候选择的组件,所以导致某些组件缺失。
一句话总结,要把 Visual Studio 好好供起来,别想着折腾了...每次都选默认安装(或者完全安装)就没事。
我的环境如下:
- Windows XP SP3
- Visual Studio Team System 2008 Team Suite (90 天试用版)
- Visual Studio 2008 Service Pack 1
今天写 ActiveX 发现 Visual Studio 2008 里面已经没有了 ActiveX Control Test Container,查了一下,发现是从 2005 版本开始取消的。
如果对这个工具念念不忘,似乎只能从旧版本里面提取了,或者下载旧版本的 SDK 里面的 Sample 重新编译。
今天,我在笔记本上的 Visual Studio 2008 TS 上编译一个正确的解决方案,发现在生成以后会自动关闭,但是项目已经正确生成。或者虽然不自动关闭,但是手动关闭时会报错。
为了解决这个问题,我甚至还重装了一遍系统。最后终于确定,原来是和安全卫士360冲突...
有些奇怪的是,我使用的另外几台机器安装的程序都一样,也是 VS2008 + 360,但都没有出现这个问题。
顺便说下,Visual Studio 在第一次运行的时候可以看到它在进行一下初始化的配置。如何恢复默认设置呢?只要在 Visual Studio 的安装目录下找到 devenv.exe 文件,然后在命令行中输入:
devenv /ResetSettings
就可以恢复 IDE 的默认设置了。
今天重新配置了 Visual Studio 2008 + Windows SDK 6.1,编译 BaseClasses 很轻松通过。但是在编译之前写的一个程序的时候却提示:
...\directshow\baseclasses\refclock.h(80) :
error C2061: 语法错误 : 标识符"CAMSchedule"
...\directshow\baseclasses\refclock.h(139) :
error C2143: 语法错误 : 缺少";"(在"*"的前面)
之类的错误。
问题出在 refclock.h 引用的 Schedule.h 文件在 Include 和 BaseClasses 重复出现了,而且内容不一致。所以需要在引用路径的时候把 BaseClasses 的路径提前。
这个问题已经有好多文章讨论,我再写一遍只是想表达一下我对微软的不满...
问题描述:安装 Visual Studio 2008 进行到 Visual Studio Web 创作组件 (Visual Studio Authoring Component) 时提示安装失败。
问题原因:这个组件安装需要使用 Office 2007 的安装文件,如果当时 Office 安装完毕后把 MSOCache 文件夹删除就会出现这个问题。事实上,所需的文件 Visual Studio 自己也有,只不过因为先装了 Office,安装程序就只能找 Office 相应的文件(依靠签名识别)。
解决方法:重新找到 Office 安装光盘,修复下 Office(这时候 MSOCache 就回来了), 重新安装 Visual Studio 即可。
使用高版本的 Visual Studio 打开低版本创建的项目(工程、解决方案)文件时,会自动转化到高版本。但这个过程是不可逆的,即高版本创建的项目(解决方案)文件不能在低版本中打开。
因为新的版本会加入很多新的特性,所以项目文件不能向下兼容。如果不得不在低版本中打开高版本创建的项目文件时,可以尝试采用手动修改解决方案文件和项目文件。
对于不同版本的 Visual Studio 生成的项目(解决方案)文件所标记的版本号是不同的,如果强制修改,则可以跳过 Visual Studio 的检查,一般就可以打开了。只是如果使用了新版本的某些特性,则可能出现一些问题。用文本编辑器打开项目(解决方案)文件,你会发现含有如下的版本标记。
| Product Name | Product Version | File Format |
| Visual Studio .Net |
v7.0
|
7
|
| Visual Studio .Net 2003 |
v7.1
|
8
|
| Visual Studio 2005 |
v8.0
|
9
|
| Visual Studio 2008 |
v9.0
|
10
|
下面示例中标记出来的部分就是需要修改的地方。
解决方案文件(.sln)
Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ProjectConverter", "ProjectConverter.vbproj", "{B637ACFD-0AFC-4FBB-A8C0-602B5ABA62F0}" EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Setup", "Setup\Setup.vdproj", "{09667F41-0E35-4D40-A0A9-E71BA6740D93}" EndProject Global .... EndGlobal
项目文件(.vbproj, .csproj, .vcproj)
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion>9.0.21022</ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{B637ACFD-0AFC-4FBB-A8C0-602B5ABA62F0}</ProjectGuid> <OutputType>WinExe</OutputType> <StartupObject>ProjectConverter.My.MyApplication</StartupObject> <RootNamespace>ProjectConverter</RootNamespace> <AssemblyName>ProjectConverter</AssemblyName> <FileAlignment>512</FileAlignment> <MyType>WindowsForms</MyType> <TargetFrameworkVersion>v2.0</TargetFrameworkVersion> <OptionExplicit>On</OptionExplicit> <OptionCompare>Binary</OptionCompare> ... </Project>
对于刚刚接触 DirectShow 的人来说,安装配置是一个令人头疼的问题,经常出现的情况是最基本的 baseclass 就无法编译。
一开始我也为此费了很大的功夫,比如说修改代码、修改编译选项使其编译通过。因为大家 Visual Studio 的版本与 DirectShow 的版本各不相同,导致问题多种多样。网上的参考也不可尽信,往往花费了大量的时间和精力,程序仍没有编译通过,而丧失学习 DirectShow 的兴趣和信心。
我在 Visual Stdio 6.0,2003,2005,2008 都尝试过了配置 DirectShow,基本可以达到不需要修改代码就可以编译通过。经验就是,要配合 Visual Studio 的版本选择不同的 DirectShow 的版本。一般来说,要选取 比同时期的 Visual Studio 略晚发行的 DirectShow 版本。(我觉得,微软至少要对新发行的 DirectShow SDK 在当前主流的编译环境中测试才对,所以一般这种匹配都是很容易一下子编译通过。)
Visual C++ 6.0
陆其明老师的《DirectShow 开发指南》是一本不错的书,使用的环境就是 VC 6.0。按照我刚才的理论,几乎所有的 DirectShow 版本都可以容易的安装在 VC 6 上,因为它太古老了。不过,要是安装最新的 SDK 反而不行,因为 VC 6 的编译器问题很多,对标准支持得也不是很好,所以导致最新的 SDK 无法编译。
陆的书上所用的版本其实是 dx9sdk.exe (2002.12.19),我这里给出的是微软官方的链接(他们把所有的版本都保留了),需要正版验证才能下载(应该不成问题吧...)。
我建议使用 DirectX SDK Summer 2004 版本,这个版本是最后一个整合 DirectShow 的 DirectX SDK版本。
之后微软把 DirectShow 分离出来了,比如需要安装 DirectX SDK April 2005 版本再加上 DirectX SDK February 2005 Extras。也就是说,DirectX 已经不含 DirectShow,这个时候(2005年)它被包含在 Extras 里面。所以安装了 Extras 基本上就可以进行 DirectShow 开发了。
Visual Studio 2003
这个版本建议安装 Summer 2004 这个版本。Extras 也没问题。
Visual Studio 2005
这个版本我用的不是很多,印象中安装 Summer 2004 没问题,甚至更低的 9.0b 也没问题。安装很新的版本就会出现我说的那种太超前反而编译不了的现象。
大概到 2006 年,DirectShow 就被包含在了 Windows Platform SDK 中。不知道最新的 Platform SDK 对 VS2005 支持地如何,我没有去试。之前有一个版本需要修改一些代码才能编译。
Visual Studio 2008
非常简单,安装最新版的 DirectX SDK June 2008 和 Platform SDK (2006.03.15) 即可。另外,Platform SDK 的后续版本似乎叫 Windows SDK,内含的 Media Foundation 似乎要取代 DirectShow。(Windows SDK for Windows Server 2008 and .NET Framework 3.5 2008.02.05)
进行环境配置
如果 DirectShow 的版本比 VS 要新,则相应的头文件和库文件就会自动配置,否则就要手动添加。
如果安装的 DirectShow 比较早,那么在 baseclasses 里面就会有相应的工程文件,打开编译即可。如果安装的是 Platform SDK 就会只有一个 makefile,注意到在安装完 Platform SDK 以后,开始菜单会有一些进入不同编译环境的快捷方式,选一个想编译的版本进入,然后在 baseclasses 下 输入 nmake,就会自动编译了。
还需要注意的就是一些库的引用、编译链接的选项等等,在出现问题的时候搜索就行,一般不是大问题。
2008-07-29 Up:
有一篇文章可以在遇到编译错误的时候参考:Some DirectShow Samples Break in Visual Studio 2005。