/SAFESEH:在項目設置NO顯示的是與傳遞名爲SAFESEH的msbuild property並將其設置爲「NO」非常不同:/ SAFESEH是鏈接器命令行選項,並且與msbuild屬性沒有直接關係。相反,在一個MSBuild項目文件中的鏈接選項在ItemDefinitionGroup稱爲鏈接,所以如果你在一個文本編輯器打開該文件,你會看到類似
<ItemDefinitionGroup>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
現在規定,如果你的項目沒有建立一個沒有SAFESEH也會唱關閉,我不明白爲什麼你不會在項目設置中永久配置它。它還具有從VS和命令行構建而不需要額外配置的好處。
如果由於某種原因,您不能這樣做,有幾個選項。第一個是基本相同,我的答案question如何通過命令行設置編譯器選項:創建一個文件,例如c:\ nosafeseh.props,含
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
</Project>
然後把它通過調用使用
msbuild TI.sln /p:ForceImportBeforeCppTargets=c:\nosafeseh.props
另一種選擇是將一個屬性「轉化」爲ItemDefinitionGroup條目。使用文本編輯器打開項目文件並添加這些行,在同一位置VS會把連接選項,用'前行後容易右:
<ItemDefinitionGroup>
<Link>
<ImageHasSafeExceptionHandlers Conditon="'$(SafeSeh)'!='">$(SafeSeh)</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
這ImageHasSafeExceptionHandlers的值設置爲值名爲SafeSeh的屬性(這是一個任意名稱,您可以選擇任何您想要的),並且只有在該屬性被定義並且具有值的情況下。因此,將其設爲false,您可以致電
msbuild TI.sln /p:SafeSeh=False
非常感謝。 msbuild TI.sln /p:ForceImportBeforeCppTargets=c:\nosafeseh.props爲我工作。 –