2012-06-29 28 views
4

我正在更新一個版本以與.NET 4.5兼容,我需要做的更改之一是updating how I call ilmergeMSBuild中獲取「引用程序集」路徑

從上面的鏈接,這基本上意味着改變:

/targetplatform:"v4,C:\windows\Microsoft.NET\Framework\v4.0.30319" 

到:

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 

在我的MSBuild AfterBuild目標我用$(MSBuildToolsPath)產生前,像這樣:

/targetplatform:v4,$(MSBuildToolsPath) 

什麼是最好的方式將其翻譯成所需的/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"路徑,以便它可以在x64,x86或任何不尋常的地方安裝?

回答

4

目標中添加GetReferenceAssemblyPaths任務。讓它將輸出保存到項目名稱或屬性,並用這個新屬性替換$(msbuildtoolsPath)。您還可以添加條件檢查以確定需要傳遞給ILMerge的內容。

<GetReferenceAssemblyPaths BypassFrameworkInstallChecks="False" TargetFrameworkMoniker=".NETFramework,Version=v4.0"> 
    <Output TaskParameter="FullFrameworkReferenceAssemblyPaths" PropertyName="path" /> 
</GetReferenceAssemblyPaths> 
+0

謝謝!我發現的一個問題是,ItemName =「path」意味着我需要使用'@(path)'語法來引用該值,或者將'ItemName'更改爲'PropertyName'以使用'$(path)'。另一個問題是路徑包含一個尾隨路徑定界符'',這導致執行命令時出現問題,所以我不得不使用'$(path).'(尾隨'。')來獲取命令來使用正確的路徑。 –

+0

我很高興你能解決ItemName問題,並改爲使用PropertyName =「path」。因爲你只有一個值,所以在你的情況下這樣做更有意義。我將更新解決方案,使其他可能使用它的人更容易。謝謝! – SoftwareCarpenter

相關問題