错误描述
manifest authoring error c1010001: Values of attribute "level" not equal in different manifest snippets.
错误原因
出现这个错误的原因是有个多个manifest文件,但是它们的配置不一致。
复现步骤
- 新建空的控制台项目,任意命名。
- 添加一个main.cpp,内容为
int main() {}
,这个文件仅用来生成exe,不做他用。 - 添加一个 test.manifest 到工程中,(一定要添加到工程中,这样链接器才会链接它。)内容如下。注意这里我们设置为需要管理员权限才能启动该程序。
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='requireAdministrator' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
- 以上我们手动创建了一个配置文件,现在让编译器为我们再生成一个:
工程属性->链接器->清单文件:生成清单文件选择是。UAC执行级别选择asInvoker。
注意这里我们设置为不需要管理员权限运行。 - 编译程序。因为两份配置文件冲突,所以出现错误。
解决方案
- 方案1(推荐):去掉我们手动添加的配置文件。保留VS的配置。
- 方案2(不推荐):保留手动添加的配置。链接器->清单文件->生成清单改为否。
- 方案3(不推荐):保留两者配置,但要保持一致。这个方案维护困难,建议舍弃。