在Visual Studio(C#)的编译时设置值?

时间:2010-11-24 21:51:13

标签: c# .net sharepoint silverlight-4.0

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

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

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

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

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

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

我愿意听到其他方法一次管理多个构建。

感谢,

3 个答案:

答案 0 :(得分:3)

假设您使用的是VS 2010

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

答案 1 :(得分: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

}

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

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

答案 2 :(得分:2)

如果使用预编译指令,则可以实现此目的。

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

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

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