/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为我工作。 –