我刚刚安装了Microsoft Robotics Studio 2008 R2,我必须承认,我很震惊地发现如何处理路径。
工作室的第一个想要将自己安装到我的个人资料中(这是在Vista上):
C:\Users\MyUserName\Microsoft Robotics Dev Studio 2008 R2
我认为这是因为在开发过程中我必须将文件写入机器人工作室文件夹,使C:\Program Files
成为不行。
然后,当我创建一个新的机器人项目时,很多指向机器人工作室的绝对路径被添加到项目中。如果我将项目检查到源代码管理中,而另一个开发人员将其检查到他的机器上,则绝对路径将无法解析,项目将无法编译。
此外,由于所有服务都被收集到robotics studio文件夹中的单个文件夹中,因此在一台计算机上开发多个独立服务似乎至少令人困惑。
你有什么好的策略来处理这个烂摊子吗?
答案 0 :(得分:1)
我现在想出了一种方法可以将Microsoft Robotics DSS服务可视化工作室项目更改为可以在自己的源代码树中编译和运行的内容,而不依赖于机器人工作室的安装路径。以下是修改项目需要执行的操作的说明:
将robotics studio bin路径添加到 PATH 环境变量,以便能够在不提供完整路径的情况下执行dssproxy.exe
。我已将robotics studio安装到程序文件文件夹中,以避免意外地将文件写入robotics studio文件夹。
打开项目的属性页面,然后选择构建标签。在输出部分中,将输出路径更改为 Debug\bin
。对于.NET项目,习惯上编译到文件夹bin\Debug
和bin\Release
但机器人托管服务期望存在于名为bin
的文件夹中并将存储数据在bin
文件夹上方的文件夹中。
转到签名标签,然后在选择强名称密钥文件框中选择一个新密钥。您可以在此时生成自己的密钥,也可以使用sn.exe
实用程序生成新密钥。或者,如果您有自己的创建密钥的策略,请遵循该规则。可以在机器人工作室的sn.exe
文件夹中找到tools
实用程序。
在构建事件标签中编辑构建后事件命令行:
dssproxy.exe /dll:"$(TargetPath)" /proxyprojectpath:"$(ProjectDir)Proxy" /keyfile:"$(SolutionDir)Key.snk" $(ProxyDelaySign) $(CompactFrameworkProxyGen) /binpath:"." @(ReferencePath->'/referencepath:"%(RootDir)%(Directory) "', ' ')
注意 /keyfile
的论点。输入一个表达式,用于查找在上一步中创建的强名称密钥文件。
将文件 DssHost.exe
和 DssHost.exe.config
(或DssHost32.exe
和DssHost32.exe.config
复制为32位托管服务)从robotics studio bin文件夹进入项目文件夹并将这些文件添加到项目中。将构建操作设置为内容,将复制到输出目录设置为复制更新。对您的服务的清单文件执行相同操作。实际上,清单文件不必与服务位于同一文件夹中,但将其复制到输出文件夹可以进行XCOPY部署。
在调试标签中,将启动外部程序更改为项目输出文件夹中的 DssHost.exe
。您必须构建项目一次才能将文件复制到输出文件夹。清除工作目录。将命令行参数设置为
/p:50000 /t:50001 /m:DSSService1.manifest.xml
将清单文件名更改为项目中的正确名称。您可以修改此处或DssHost.exe.config
文件中使用的端口号。如果您在受保护的Windows环境(UAC)中运行,则必须使用 httpreserve
命令为自己提供对特定端口的访问权限。您必须以管理员身份运行此命令。
调试设置不存储在项目文件中,每个开发人员都必须创建个人设置。
您还应该相应地更新发布配置。
答案 1 :(得分:0)
由于我只对MS Robotics的CCR感兴趣,我只是添加这些程序集作为我使用它的任何项目的参考,并且只是完成它。
这没有任何问题。因此,如果您只对工作室的CCR和DSS部分感兴趣,那么这可能是您的解决方案
Reinier
答案 2 :(得分:0)
我们经常看到这个问题。绝对最简单的解决方案是在将robotics studio安装为“C:\ program files \ microsoft robotics studio”时指定安装目录。这样在机器之间移动代码,检查源代码控制等等就变得不那么成问题了。
另一种选择是使用dssprojectmigration,它包含在RDS中。只需对项目目录运行dssprojectmigration,它就会纠正所有硬编码路径。