2) 項目到項目引用屬性的變化
轉換后,CopyLocalDependencies和UseDependenciesInBuild屬性會被去除!癠se in Build”屬性改為“Reference Assembly Output”,以更好地表示該屬性的作用。另外兩個屬性:“Link Library Dependencies”和“Use Library Dependency Inputs”增加到了被引用的那個項目中,以便被引用的項目控制它的輸出是否被傳遞到引用它的那個項目中。以下是Visual Studio 2008和Visual Studio 2010項目到項目引用屬性的對比圖。

-把“Reference Assembly Output”設為“false”會允許該項目成為項目到項目引用的一部分,從而設置構建依賴關系,而它的輸出不會被傳遞到引用它的那個項目的CL中。此屬性用于被托管的程序。
-把“Link Library Dependencies”設為“false”,會允許該項目成為項目到項目引用的一部分,從而設置構建依賴關系,而它的輸出不會被傳遞到引用它的那個項目的鏈接器中。
3)VC + +目錄變化
Visual Studio 2010不再支持在Tools->Options中設置VC + +目錄。相反,Visual Studio 2010引入了用戶設置文件(Microsoft.cpp.
下面是通過用戶界面更改設置文件的步驟:
◆點擊View.Property Manage打開屬性管理器。
◆展開項目節點,然后是Configuration|Platform 節點,你將會看到針對每個Configuration|Platform 的"Microsoft.cpp.
◆復選"Microsoft.cpp.
◆在屬性窗口頁中,單擊左窗格中的"VC++ Directories",添加諸如“Include Directories"的目錄的路徑,以分號隔開。
◆請確保關閉Visual Studio之前保存了剛才的設置。
◆重新啟動Visual Studio,新的設置將會生效。
-注意:如果你想只改變一個項目的設置,你可以右鍵單擊該項目,彈出屬性頁。更改“VC++ Directories”的設置,這些設置便被保存到項目文件中。
4) 自定義生成規則的改變
在Visual Studio 2008中,自定義生成規則是由.rules文件定義的。轉換后,.rules文件將會變成三個單獨的文件:.targets, .xml以及.props。轉換后,你會在.rules所在的目錄中發現這三個文件。請注意,沒有UI可用于添加新的自定義生成規則。
5) 改動檢查的變化
當你按下F5鍵,檢查改動情況的窗口可能每次會彈出,即使是剛剛才重新構建了一次。你可以參照這個博客來解決這一問題。最有可能的的原因是某些文件被列為了該項目的的一部分,但卻不在磁盤上了。由于這些文件是項目文件的一部分,更新檢查機制每次都會檢查它們是否存在。而如果在磁盤上不存在該文件,Visual Studio 2010就會認為需要重新構建一次。解決方法是,如果那些文件不存在了,請把它們從項目文件中刪除掉。
Visual Studio 2010中的一個限制是,它還不支持可控增量構建(Managed Incremental build)。我們正在研究如何在未來版本中支持這一功能。
在Visual Studio 2010轉換過程中的已知問題
以下是在Visual Studio 2010的轉換過程中已知存在的一些問題:
1) TargetFrameworkVersion
轉換后,托管的C++項目將設為默認為針對4.0 Framework。這種設計背后的原因是,Visual Studio 2010構建器的不支持2.0,3.0或3.5 Framework。Visual Studio 2008的構建器則必須使用2.0,3.0或3.5 Framework。為了使轉換后的C++應用程序能馬上就能運行,我們決定將C++程序的默認TargetFrameWorkVersion 屬性改成4.0?梢酝ㄟ^下面其中一種方法把C++應用程序重新定向到其它Framework(如3.5):
編輯vcxproj文件,并在第一組定義中加入以下內容:
打開Visual Studio 2010的命令行,設置TargetFrameworkVersion = v3.5,然后從命令行運行devenv.exe。這將把所有C++應用的目標框架設為v3.5。
在構建程序時傳遞/p:TargetFrameworkVersion = v3.5參數給MSBuild:MSBuild my.vcxproj /p:TargetFrameworkVersion =v3.5
請注意,要在安裝了Visual Studio 2008的情況下才能把應用程序的定向到2.0,3.0或3.5 Framework。
對于C#/ VB應用程序,如果目標Framework已經安裝在了計算機上,轉換過程中則不會改變目標Framework。 如果目標Framework沒有安裝,你可以選擇下載所需要的Framework或將目標Framework升級到4.0版。
-如果在你的解決方案中混合有CSharp / VB/托管C++項目,你可能會碰到它們分別針對不同目標Framework的情況。如果被引用項目的目標Framework比引用它的項目的Framework版本還高,你可能會收到警告MSB3258:
-The primary reference “foo, Version=x.x.xxx.xxxx, Culture=neutral, processorArchitecture=x86” has an indirect dependency on the .NET Framework assembly “mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” which has a higher version “4.0.0.0” than exists in the current target framework. The version found in the current target framework redist list is “2.0.0.0”. By including the primary reference you may get compile and/or runtime errors.
-你也可能如C4691這樣的警告:type referenced was expected in the unreferenced assembly ‘file’, type defined in current translation unit used instead, if the Framework version of the referencing project is higher.
-你需要把解決方法中的所有項目設為同一個版本的Framework。
2) 在makefile的"Output"屬性中使用引號
如果某個項目的makefile中"Output"屬性里有引號,轉換將無法進行。解決方法是在轉換前把"Output"屬性里的引號去掉。
3) $(IntDir) 和 $(OutDir)中的反斜杠。
$(IntDir)和$(OutDir)分別對應屬性頁中的“General -> Intermediate Directories”和“General -> Output Directories”。為了統一$(IntDir)和$(OutDir)的格式,如果沒有以"\"結尾的話,轉換過程中會自動在它們的屬性值末尾追加“\”。如果末尾有“/”的話將會被刪掉。
不過,如果$(IntDir)或$(OutDir)用在makefile或自定義生成中,Exec任務會用到它,這就可能導致構建過程中斷。
在makefile中,如果它們以"\"結尾,nmake工具就無法評估它的值。例如,使用如下命令,
BuildCommandLine="nmake /nologo "OUT=$(OutDir)" "OBJ=$(IntDir)""
因為$(OutDir)和$(IntDir)末尾有“\”,nmake工具不能正確地將其展開,OUT和OBJ的值會被置為空。為了解決這個問題,你需要在屬性頁刪除$(IntDir)和$(OutDir)中的"\"。
如果$(OutDir)或$(IntDir)被傳遞給自定義生成,包括生成事件、自定義生成工具,以及自定義生成步驟,你可能會遇到構建失敗,其原因是“\”可能被這些工具當成了轉義字符。例如,如果你有一個跟下面類似的預生成事件:
命令行是:cl /c /Fo"Debug\" "C:\foo\win32.cpp" instead of cl /c /Fo"Debug\\" "C:\foo\win32.cpp"
要解決這個問題,在傳遞給/Fo的值中的添加一個額外的“\”(C/C++ -> Output Files -> Object File Name),以補償被當作轉義字符的"\"。
4) 解決方案資源管理器界面
在Visual Studio 2010中,解決方案資源管理器里的文件和文件夾顯示由.vcxproj.filters文件控制。如果你有名字相同但位置不同的文件夾,例如“Native\Include”和 "Include",那么在轉換后,第二個"Include"和它里面的文件將不會顯示在解決方案資源管理器中。若要解決此問題,你可以重新在解決方案資源管理器創建這個文件夾,并將相應的文件添加到文件夾中。
5) 只讀的項目文件或目錄
當你從一個只讀目錄中開始升級,或是對以前只讀的項目文件進行重新轉換時,都有可能碰到問題。務必確保這些目錄和文件都是可寫的,除非你能對這些文件自動進行檢查,就像在集成資源管理系統(integrated source control system)中能做到的那樣。
文章來源于領測軟件測試網 http://www.kjueaiud.com/