我有一个包含C#和托管C++项目的解决方案.它在解决方案平台x64和x86中编译.由于它是托管C++,我想创建一个'Any CPU'解决方案并摆脱旧的解决方案.
我将C++项目链接器设置更改为x64和x86的强制安全IL映像.
接下来,使用Configuration Manager,我创建了一个名为"Any CPU"的新解决方案平台.接下来我添加了一个名为"Any CPU"的项目平台.
我继续将所有C#项目设置为"任何CPU",但对于C++我不能这样做.项目平台'Any CPU'不在下拉列表中,也没有选项'New ...'.
VS是关于它的,所以我保持它就像它并开始构建.令我惊讶的是,结果DLL(来自C++项目)是MSIL,即使C++的平台是x64.编译x32时也是如此,生成的DLL在MSIL中.
是什么赋予了?为什么我不能将C++项目设置为"任何CPU"?
我创建了一个升级软件的安装程序,但由于某种原因,XML 配置文件(我们软件的配置文件)在升级时被删除。
如果升级软件的所有功能,就会出现这种情况。我们的软件是存档类型的东西。如果我只安装该功能并升级它,一切都很好。
但是,如果我安装存档附带的所有服务并升级这些服务,那么所有配置文件(每个配置文件都位于不同的文件夹中!)都会消失。
举个例子:
<ComponentGroup Id="AutoArchiveTool" Directory="AutoArchiverFolder">
<Component Id="C_AutoArchivingTool_Gateway_exe_config" NeverOverwrite="yes" Guid="{A62D5200-FDE0-4DA1-A04A-7FBDACEA83B2}">
<File Id="F_AutoArchivingTool_Gateway_exe_config" Source="$(var.Gateway.TargetDir)Gateway.exe.config" KeyPath="yes"/>
</Component>
... more script
</ComponentGroup>
Run Code Online (Sandbox Code Playgroud)
如果您记录安装程序,您甚至可以看到它被识别为“永不覆盖”:
Disallowing installation of component: {A62D5200-FDE0-4DA1-A04A-7FBDACEA83B2} since the keyfile exists and the component is marked to never overwrite existing installations
Run Code Online (Sandbox Code Playgroud)
不过升级后就没有了。我缺少什么?我已经看到了“永久”属性,但这不是我想要的。我希望安装程序在升级期间保留配置文件。删除后不要留下它们(配置文件)。