Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在Visual Studio 2010安装程序项目中添加自定义操作_C++_Visual Studio 2010_Installation - Fatal编程技术网

C++ 无法在Visual Studio 2010安装程序项目中添加自定义操作

C++ 无法在Visual Studio 2010安装程序项目中添加自定义操作,c++,visual-studio-2010,installation,C++,Visual Studio 2010,Installation,我将一个工作项目从VisualStudio2008转换为VS2010。C++解决方案构建一个可执行文件和3个DLL,以及一个Windows安装程序Project。p> 转换到VS2010后,我从项目输出组“Primary Output”收到一个生成错误“无法生成名为“Primary Output from xxxx(Active)”的自定义操作,因为该项目输出组没有密钥文件。” 我删除并重新添加了输出组,然后尝试添加自定义操作。可执行输出未作为自定义操作的候选项列出。然后,当我选择可执行文件“主

我将一个工作项目从VisualStudio2008转换为VS2010。C++解决方案构建一个可执行文件和3个DLL,以及一个Windows安装程序Project。p> 转换到VS2010后,我从项目输出组“Primary Output”收到一个生成错误“无法生成名为“Primary Output from xxxx(Active)”的自定义操作,因为该项目输出组没有密钥文件。”

我删除并重新添加了输出组,然后尝试添加自定义操作。可执行输出未作为自定义操作的候选项列出。然后,当我选择可执行文件“主输出”属性时,我注意到“KeyOutput”属性被设置为(None)并灰显

重新访问VS2008版本时,KeyOutput属性未灰显。我在MSDN上发现了错误消息,并进行了无用的修复:

“删除自定义操作,并将其替换为指向具有密钥文件的项目输出组的自定义操作。”


显然,这位科技作家也不知道如何修复它。请记住,原始版本工作正常,安装正确。我认为根本问题是为什么KeyOutput属性被禁用-但为什么?(查看“输出”时,它会正确显示每个项目中的exe或dll)

经过进一步调查,我发现这是Visual Studio 2010中的一个错误

如果为项目指定的输出名称与项目本身的名称不同,则无法正确执行

要重现这一点,需要改变

项目属性->链接器->常规->从$(OutDir)$(TargetName)$(targetText)输出文件,类似于$(OutDir)foobar.exe


然后,项目将KeyOutput值更改为空,并且不可用于安装中的自定义操作。除了使用默认项目命名约定外,没有其他解决方法

我也遇到了类似的问题,我找到了安装项目找不到密钥输出文件的原因


我的项目输出目录被定义为$(SolutionDir)\bin\$(平台)。SolutionDir已经有一个尾随反斜杠,因此\bin在路径中放置了一个双反斜杠。该项目将构建良好,但安装项目无法解析关键输出。将输出设置为$(SolutionDir)bin\$(平台)\n解决了该问题

回答得很晚,但希望它能帮某人省下我用VS 2010(这是一个多么糟糕的软件,加载速度慢,每个开发占用300兆的工作内存,现在这个bug!!!)来了- Roger Dunn说得对,是项目属性->链接器->常规->输出文件导致了问题-如果您有类似$(OutDir)foobar.exe的自定义操作条,如果您将其更改回$(OutDir)$(TargetName)$(targetText),它将再次工作

解决方法是将宏$(TargetName)更改为foobar,然后将用户$(OutDir)$(TargetName)$(targetText)更改为exe的自定义名称

$(TargetName)可以在以下位置更改-项目属性->配置属性->常规->TargetName

但与2010年相比,这真是浪费时间