C# 命令";esriRegasm.exe…“;已退出,代码为-1。我能';我们不能建立一个项目

C# 命令";esriRegasm.exe…“;已退出,代码为-1。我能';我们不能建立一个项目,c#,visual-studio-2015,arcmap,arcobjects,C#,Visual Studio 2015,Arcmap,Arcobjects,我想在VisualStudio中构建一个使用ArcObjects创建工具的项目。我得到这个错误: The command "esriRegasm.exe "...Project1.dll" /p:Desktop /s" exited with code -1. 我使用C#,Visual Studio 2015,ArcObjects 10.5,ArcMap 10.5 我看了过去的问题,也犯了同样的错误() 我试图这样解决问题: 试图以“管理员”而不仅仅是

我想在VisualStudio中构建一个使用ArcObjects创建工具的项目。我得到这个错误:

The command "esriRegasm.exe "...Project1.dll" /p:Desktop /s" exited with code -1.
我使用C#,Visual Studio 2015,ArcObjects 10.5,ArcMap 10.5

我看了过去的问题,也犯了同样的错误()

我试图这样解决问题:

  • 试图以“管理员”而不仅仅是用户的身份打开解决方案
  • 从命令行运行
    esrregasm.exe
    命令。我试了两种方法。第一个是Visual Studio()中的错误,第二个是根据help.arcgis网站上的说明。();
  • 试图打开.csproj文件,转到该文件的结尾,找到行
    esrregasm.exe
    ,删除它并重建项目

所有这些都不起作用。如何构建项目?

esriregasm工具用于注册您自己的命令、工具或扩展,以便在ArcGIS中使用。它通常在csproj文件末尾定义为msbuild任务,如下所示:

<Target Name="BeforeClean" Condition=" '$(NO_ESRI_REGASM)' == '' ">
  <Exec WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin" Command="esriRegasm.exe &quot;$(TargetPath)&quot; /p:Desktop /u /s" Condition="Exists('$(TargetPath)')" />
</Target>
<Target Name="AfterBuild" Condition=" '$(NO_ESRI_REGASM)' == '' ">
  <Exec WorkingDirectory="$(CommonProgramFiles)\ArcGIS\bin" Command="esriRegasm.exe &quot;$(TargetPath)&quot; /p:Desktop /s" />
</Target>
请注意,我省略了
/s
-标志是为了获得更多的平均错误。您还可以附加
/e
-开关以获得更详细的错误,这与我的经验不太相符

现在查看ECFG文件所在的文件夹。这通常是
%CommnonProgramFiles%\ArcGIS\Desktop\Configuration\CATID
。确保有一个文件包含程序集的名称和扩展名
ecgf
(它在开始时可能还有一些GUID,例如
{6d102248-13e2-40a0-8011-378543f63901}\u MyAssembly.ecfg
)。这只是一些zip文件,您还可以解压缩它并找到一个包含命令和工具guid的xml文件。如果按照前面提到的步骤注册程序集不起作用,您可以删除该ecfg文件并重新构建(!!)您的程序集。然后验证该文件是否已在该文件夹中创建


如果这仍然不起作用,只需将编译的程序集连同最终存在的ecfg文件一起删除,然后重新构建。

我经常会遇到这个错误,但从未真正解决它。通常我只是删除csproj文件中的
BeforeClean
-和
AfterBuild
-目标,调用通常在这里定义。但是,我建议转到
gis.stackexchange
,询问与ArcGIS相关的问题。当您右键单击程序集并选择“注册”时,会发生什么情况?错误报告太蹩脚,无法告诉您出了什么问题。您需要知道InnerException,但它不会告诉您。使用“项目>属性>调试”选项卡进行调试,选择“启动外部程序”并键入命令。接下来使用调试>窗口>异常设置并勾选CLR异常。按F5键,调试器应在代码中导致异常的语句处停止。通常是一个静态变量的初始化会停止。@HansPassant在“启动外部程序”字段中,我有到ArcMap.exe的路径。我需要换吗?我选择了所有“CLR例外”。@HimBromBeere我不知道我需要在哪里按下右键并找到“注册”。我是一名初学者,感谢您的理解。当我尝试使用命令行注册程序集时,出现错误
无法加载文件或程序集“file://…/Project1/bin/Debug”或其依赖项之一。拒绝访问。
但我正在以“管理员”的身份使用命令行。我试图使用
net用户管理员/active:yes
命令进入Windows。仍然拒绝访问。“…ArcGIS\Desktop10.5\bin\Configuration\CATID”的位置与我的生成无关。只有esri.catid.ecfg。我删除了esri.catid.ecfg文件和程序集文件并重新生成项目,然后出现错误
无法注册程序集“…\Project1\bin\Debug\Project1.dll”。调用的目标抛出了异常。
woe,这比我从工具中得到的更具描述性。无论如何,ecfg文件不包含在ArcGIS的程序文件夹中,而是包含在
%CommonProgramFiles%/ArcGIS
中,这对我来说是
C:/ProgramFiles(x86)/CommonFiles/ArcGIS
。CATID文件夹仅位于
C:\program files(x86)\ArcGIS\Desktop10.5\bin\Configuration
位置。我没有位置“C:/ProgramFiles(x86)/CommonFiles\ArcGIS\Desktop 10.5\Configuration\CATID”。文件夹
C:/Program Files(x86)/CommonFiles\ArcGIS\Desktop 10.5
包含bin、帮助、支持、第三方子文件夹,仅此而已。
%CommonProgramFiles%\ArcGIS\bin\esriregasm /p:Desktop /u
%CommonProgramFiles%\ArcGIS\bin\esriregasm /p:Desktop