$(OutDir),$(TargetName)和$(TargetExt)在“常规”属性页中分别对应“Output Directory”,“Target Name”,“Target Extension”。你可以手动更改这些属性的值,这样你就不会再看到警告了。
-如果你的项目生成了导入库(Linker -> Advanced -> Import Library),而且链接器的输出目录不是默认目录,那么你可能还需要更改导入库的输出文件夹。否则,生成的导入库所在的目录就可能会与链接器的输出不同。
-调试。转换后命令被设为默认的$(TargetPath)。你可能需要做一些改动,这样当按下F5 (Debugging)或 Ctrl + F5 (Start without debugging)之后才能加载正确的可执行程序。
2) 属性表的排序
如果你的应用程序有属性表,那么在转换过程中你可能会遇到下面的警告中:
- All user macros reported below for configuration 'Debug|Win32' are used before their definition, which can cause undesirable build results; this is not supported in this release. You can resolve this by changing the inclusion order of the consuming property sheets and making sure they come after the property sheets defining the user macros. - MSB4211: C:\foo\PropertySheet\foo.props; The property "MyIncludePath" is being set to a value for the first time, but it was already consumed at "C:\foo\PropertySheet\bar.props".
该警告归因于MSBuild对其属性的评估方式:MSBuild按顺序依次评估其属性值。如果在派生的属性表中定义的属性在父属性表中被使用,那么其值就会被设为空。然而,VCBuild采用的是延迟评估方式。这样,即使是在派生属性表中定义的属性也可以在父属性表中使用。若要解决此问题,请按照警告消息改变属性表中的顺序,从而确保属性在定义后才被使用。
升级后的行为变化
尽管底层的构建系统已经发生了改变,但我们仍尽力让用户在迁移到Visual Studio 2010后有相同的使用体验。另外,我们还采取了一些措施来改进构建体验或是迎合MSBuild的某些特定要求。因此,一旦你迁移到Visual Studio 2010,就可能就会注意到以下一些变化。
1) 从“解决方案依赖”到“项目到项目的引用”
如果在一个旧版本Visual Studio版本下进行编译的C++程序被转换到Visual Studio 2010后,解决方案级定义的项目依赖关系便会被转化成项目到项目的引用(project to project references)。这一变化确保了C + +项目依赖关系能够在项目文件中被捕获。下面就是一个项目到项目的引用在项目文件中的样子:
在项目文件中存放依赖关系有几个优点。首先,用户可以在不用解决方案的情况下构建一个项目,相关的项目会自动被构建。第二,它为那些拥有巨大的代码树又可能不会使用解决方案文件的用户提供了方便。 此外,许多客户都有好几个解决方案文件,每个文件都包含项目的不同子集。通过这种方式就可以让用户避免为每个解决方案设置依赖关系。另一个重要因素就是,使用项目到项目的引用使得构建过程更加可靠,尤其是在多核的环境下。这与Visual Studio早期版本的情况也是一致的。
-如果某个C#程序依赖于一个C++程序,并且这一依赖只使用了解决方案依赖关系表示,那么现在的这种转换并不会把解决方案依赖关系转换成项目到项目的引用。你可能会碰到因为不正确的构建顺序而导致的构建错误,尤其是使用命令行直接进行MSBuild构建的时候。要解决该问题,你得为C#和C++程序手动设置项目到项目的引用。
-在Visual Studio 2010中设置新的构建依赖关系时,通常都要用项目到项目的引用替代解决方案依赖。
2) 项目到项目引用属性的变化
转换后,CopyLocalDependencies和UseDependenciesInBuild属性会被去除。“Use in Build”属性改为“Reference Assembly Output”,以更好地表示该属性的作用。另外两个属性:“Link Library Dependencies”和“Use Library Dependency Inputs”增加到了被引用的那个项目中,以便被引用的项目控制它的输出是否被传递到引用它的那个项目中。以下是Visual Studio 2008和Visual Studio 2010项目到项目引用属性的对比图。
-把“Reference Assembly Output”设为“false”会允许该项目成为项目到项目引用的一部分,从而设置构建依赖关系,而它的输出不会被传递到引用它的那个项目的CL中。此属性用于被托管的程序。
文章来源于领测软件测试网 https://www.ltesting.net/