【问题标题】:Setting values at compile-time in Visual Studio (C#)?在 Visual Studio (C#) 的编译时设置值?
【发布时间】:2010-11-24 21:51:12
【问题描述】:

我目前正在使用 C# 并开发一些使用 sharepoint Web 服务作为数据源的 Silverlight 应用程序。

sharepoint 管理员决定,为了“隔离”用户,他们必须多次创建同一个 sharepoint 列表,并授予每个分支的用户访问该分支对应列表的权限。

这会产生一些问题,因为我必须为每个分支的共享点列表设置 guid,并编译同一应用程序的 5 个不同版本。

最终我决定创建一个 ListProperties 类,并将当前分支的名称传递给一个方法,以便它返回正确的 guid。

所以现在,我将一个变量(分支)设置为“BRANCH-A”,编译并将应用程序重命名为“AppBranchA.xap”。然后对每个分支执行相同的操作。

有没有办法在编译时传递一个字符串并让变量(希望也是应用程序名称)自动更改?

我愿意听取其他同时管理多个构建的方法。

谢谢,

【问题讨论】:

    标签: c# .net sharepoint silverlight-4.0


    【解决方案1】:

    假设您使用的是 VS 2010

    您可以使用Build configurations 与分支名称结合config transforms 来更改值。然后你只需要构建每个配置。

    【讨论】:

      【解决方案2】:

      解决此问题的一种方法是使用条件编译符号来控制将哪个GUID 值用于一组特定于分支的属性。例如

      class ListProperties {
      
      #if BRANCH-A
        public static readonly GUID BranchGuid = "Guid #1";
      #endif
      
      #if BRANCH-B
        public static readonly GUID BranchGuid = "Guid #2";
      #endif
      
      }
      

      这允许您通过更改命令行上定义的预处理器符号来控制分支定义的值。

      另一种选择是使用配置文件来存储特定于分支的数据。然后,您可以构建一次应用程序并根据目标分支使用不同的配置文件部署它。

      【讨论】:

        【解决方案3】:

        如果你使用预编译指令,你可以做到这一点。

        #if BRANCH_A
         readonly Guid myId = new Guid("some guid");
        #endif
        
        #if BRANCH_B
         readonly Guid myId = new Guid("some other guid");
        #endif
        

        如果您想变得更漂亮,您甚至可以创建新的构建版本(而不仅仅是调试和发布)。然后,您为该构建定义了相应的指令。

        【讨论】:

        • 这不会编译。 GUID 不能是 const 成员,并且字符串文字不能隐式转换为 GUID
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 2020-12-01
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        相关资源
        最近更新 更多