从C#控制VisualSVN服务器

我安装了VisualSVN Server 2.5.4。 我可以创建用户和存储库。 我的问题是如何从C#创建/删除用户/存储库。 有图书馆吗?

更新03/09/2015

无需再编写自定义WMI脚本; 从VisualSVN Server 3.4开始提供的PowerShell cmdlet涵盖了大多数Subversion服务器管理和存储库管理用例。 在https://www.visualsvn.com/server/features/powershell/上阅读有关新function的信息

VisualSVN Server 3.4引入了PowerShell模块,为您提供了许多有用的cmdlet。 cmdlet可用于本地或远程管理VisualSVN Server及其存储库。 以下是VisualSVN Server PowerShell cmdlet的完整参考 。

例如,

  • 您可以通过运行此PowerShell命令来创建新的存储库MySuperRepo

    New-SvnReposiory MySuperRepo

  • 您可以在存储库中创建项目结构

    New-SvnRepositoryItem MySuperRepo -Path /branches, /tags, /trunk -Type Folder

  • 您可以为DOMAIN \ Developers Active Directory组帐户提供对新存储库的读/写访问权限

    Add-SvnAccessRule MyRepo -Path / -AccountName DOMAIN\Developers -Access ReadWrite

  • 您可以计算存储库在磁盘上占用的大小:

    Measure-SvnRepository MySuperRepo

  • 您可以validation存储库是否存在损坏:

    Test-SvnRepository MySuperRepo

    还有更多!

有关更多信息和cmdlet的完整列表,请阅读文章VisualSVN Server PowerShell Cmdlet Reference 。


VisualSVN Server可以通过WMI(Windows Management Instrumentation)界面进行管理。

描述VisualSVN Server接口的MOF文件位于安装VisualSVN Server的计算机上的%VISUALSVN_SERVER%\ WMI中 。 使用此文件作为参考,您可以编写C#脚本来管理VisualSVN Server。

请查看MSDN文章: http : //msdn.microsoft.com/en-us/library/bb404655

我将包括以下样本供您参考:

  • 这个C#代码将创建一个Subversion用户’user1’,密码为’secret’。

      ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_User", null); // Obtain in-parameters for the method ManagementBaseObject inParams = userClass.GetMethodParameters("Create"); // Add the input parameters. inParams["Name"] = "user1"; inParams["Password"] = "secret"; // Execute the method and obtain the return values. ManagementBaseObject outParams = userClass.InvokeMethod("Create", inParams, null); 
  • 这个C#代码将创建一个新的存储库’Repo1’。

      ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null); // Obtain in-parameters for the method ManagementBaseObject inParams = repoClass.GetMethodParameters("Create"); // Add the input parameters. inParams["Name"] = "Repo1"; // Execute the method and obtain the return values. ManagementBaseObject outParams = repoClass.InvokeMethod("Create", inParams, null); 
  • 此C#代码将为SID S-1-5-32-545(’BUILTIN \ Users’)提供对存储库’Test’的读/写访问权限。 FYI:AccessLevel值如MOF中所述: “0 – 无访问权限,1 – 只读,2 – 读/写”

     ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null); ManagementClass authzClass = new ManagementClass("root\\VisualSVN", "VisualSVN_SecurityDescriptor", null); ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null); ManagementObject userObject = userClass.CreateInstance(); userObject.SetPropertyValue("SID", "S-1-5-32-545"); ManagementObject permObject = permClass.CreateInstance(); permObject.SetPropertyValue("Account", userObject); permObject.SetPropertyValue("AccessLevel", 2); ManagementObject repo = new ManagementObject("VisualSVN_Repository.Name='Test'"); ManagementBaseObject inParams = authzClass.GetMethodParameters("SetSecurity"); inParams["Object"] = repo; inParams["Permissions"] = new object[] { permObject }; ManagementBaseObject outParams = authzClass.InvokeMethod("SetSecurity", inParams, null); 

更新于2013年10月2日:

WMI架构已在VisualSVN Server 2.6中更改(并得到改进!)。 简而言之,要在存储库路径上设置访问权限,您需要:

  • 创建指定存储库名称的VisualSVN_Repository类对象,
  • 创建VisualSVN_PermissionEntry条目对象,指定帐户用户名和访问权限,
  • VisualSVN_Repository上调用SetSecurity方法,传递有效的存储库路径和PermissionEntry对象。

      ManagementClass userClass = new ManagementClass("root\\VisualSVN", "VisualSVN_WindowsAccount", null); ManagementClass permClass = new ManagementClass("root\\VisualSVN", "VisualSVN_PermissionEntry", null); ManagementClass repoClass = new ManagementClass("root\\VisualSVN", "VisualSVN_Repository", null); ManagementObject userObject = userClass.CreateInstance(); userObject.SetPropertyValue("SID", "S-1-5-32-545"); ManagementObject permObject = permClass.CreateInstance(); permObject.SetPropertyValue("Account", userObject); permObject.SetPropertyValue("AccessLevel", 2); ManagementObject repoObject = repoClass.CreateInstance(); repoObject.SetPropertyValue("Name", "MyProject"); ManagementBaseObject inParams = repoClass.GetMethodParameters("SetSecurity"); inParams["Path"] = "/trunk"; inParams["Permissions"] = new object[] { permObject }; ManagementBaseObject outParams = repoObject.InvokeMethod("SetSecurity", inParams, null);