sti*_*g_1 5 compact-framework environment-variables windows-mobile-5.0 windows-ce visual-studio-2008
首先,我将从我想要完成的任务开始,然后我将提供上下文详细信息:
当我选择开始调试时,我希望输出目录发生变化,具体取决于通过Windows Mobile Device Center连接的设备.澄清:从我们的安装程序安装工作正常,但从Visual Studio调试是给我带来问题的.
我正在使用Visual Studio 2008.该项目是一个用C#编写的用于Compact Framework 3.5的智能设备项目,目标是Windows Mobile 5.0 Pocket PC Device R2(根据项目设置).我发现当我定位此设备类型时,它可以在我们支持的所有Windows Mobile版本上正常工作.任何建议的解决方案都必须适用于Windows Mobile和Windows CE.
当我进入项目属性,并转到设备选项卡时,它显示输出文件文件夹:和输出的路径.如果我单击...按钮,我可以将其更改为不同的默认值,甚至将其设置为根文件夹,然后完全指定我想要的确切路径作为子目录.在大多数设备上,如果我将它保留在(设备默认值)或从下拉列表中选择程序文件文件夹,它可以正常工作.问题是当它在Windows CE设备上运行时,我们支持它需要从不同的位置运行.
可能的解决方案:
多项目解决方案:为不同的设备提供多个项目.这个问题是我不知道怎么做而不违反DRY原则,因为某些文件需要包含在输出中,我不想在不同的Start项目之间来回切换.
重新定义%CSIDL_PROGRAM_FILES%
解决方案:更改%CSIDL_PROGRAM_FILES%
含义,因为这可以在指定Program Files所在位置的输出路径中.但是,我不知道这是否可能或从哪里开始尝试这个.我想也许这将在设备注册表中定义,但我找不到它.
自定义路径变量解决方案:选择根文件夹,然后在子目录下以某种方式引用变量(可能通过以%
?开头和结尾?)在我可以更改为我需要的路径中(可能来自后期构建或预部署(如果有这样的事情)脚本).我不知道这是否可能或从哪里开始.
任何帮助将不胜感激,谢谢!
编辑:
在做了一些挖掘后,我最好的猜测是%CSIDL_PROGRAM_FILES%
Windows CE环境变量.我仍然不知道是否可以创建或修改这些.
首先我尝试在项目文件中使用环境变量:
<DeploymentTool
ForceDirty="-1"
RemoteDirectory="$(ceRemoteDir)"
RegisterOutput="0"
AdditionalFiles=""
/>
Run Code Online (Sandbox Code Playgroud)
但不幸的是,只有在启动 VS 时才会更新,之后不会更新。
我会使用免费的远程工具来定制部署脚本。
使用 preg 您应该能够识别批处理脚本中的不同设备:
pregutl.exe hklm\Ident
Run Code Online (Sandbox Code Playgroud)
例如将给出:
[HKLM\Ident]
Desc=""
Name="CK7007121144066"
OrigName="Pocket_PC"
Restriction=dword:00000002
Username="guest"
Run Code Online (Sandbox Code Playgroud)
在一台设备和另一台设备上我得到:
[HKLM\Ident]
Desc="Intermec CN3 Device"
Name="CN3A32110646073"
OrigName="IntermecCN3"
Restriction=dword:00000002
Username="guest"
Run Code Online (Sandbox Code Playgroud)
在 bat/cmd 文件中过滤它,然后使用 pput 根据 pregutl 查询将 exe 部署到不同的目录应该不难。
然后可以使用 bat/cmd 文件代替 VS 部署作为构建后事件。
是的,这一切有点复杂,但会起作用。
归档时间: |
|
查看次数: |
5833 次 |
最近记录: |