小编Cha*_*ert的帖子

调用`Workspace.PendAdd`不添加项目

我有一个循环中调用的以下函数,用于添加到源代码控制的两个新项目.循环的每次迭代都会获取源代码,将其复制到文件夹,创建tfs团队项目,为该项目创建工作区,然后尝试将代码添加到源代码控制中.

static void Main(string[] args) {
    var tfsWorkItems = _<IWorkItems>();
    var workItems = tfsWorkItems.GetProjectsToMigrate();
    var tfs = _<ITfs>();
    var logFilePath = new DirectoryInfo("C:\\log");
    var workingDirectory = new DirectoryInfo("C:\\m");
    Cleanup(workItems, tfs, logFilePath, workingDirectory);
    var svn = _<ISvn>();
    var app = _<IApplication>();
    foreach (var workItem in workItems)
    {
        var root = Path.Combine(workingDirectory.FullName, workItem.Id.ToString());
        var svnBase = Path.Combine(root, "s");
        var localWorkspacePath = Path.Combine(root, "t");
        var tfsBase = Path.Combine(localWorkspacePath, workItem.TfsProjectName, "Main");
        var tfsProject = workItem.ProjectType.ToLower() == "php" ? Path.Combine(tfsBase, "src")
                                                                    : tfsBase;
        svn.CheckoutFromSvn(workItem.SvnLocation, svnBase); …
Run Code Online (Sandbox Code Playgroud)

c# tfs-sdk tfs2010

2
推荐指数
1
解决办法
4751
查看次数

如何在回发时捕获并触发用户控件的自定义事件

我有一个不使用任何asp.net 控件的用户控件(例如foo.ascx)。我没有按钮单击事件或任何我可以依赖的东西。所以以下不是一个选择:

void Page_Load(object sender, EventArgs e) {
  MyButton.Click += MyButton_Click; // <-- I can't do this, there are no asp.net controls
}

void MyButton_Click(object sender, EventArgs e) {
    OnItemSelected("foo"); // fire my custom event
}
Run Code Online (Sandbox Code Playgroud)

我需要触发 ItemSelectedEvent。我知道如何制作这样的方法和事件

public event EventHandler<MyEventArgs> ItemSelected;

void OnItemSelected(string selectedItem) {
  var tmp = ItemSelected;
  if (tmp != null)
    tmp(this, new MyEventArgs { SelectedItem = selectedItem });
}
Run Code Online (Sandbox Code Playgroud)

我需要在客户端站点上使用什么 JavaScript 来指示我正在触发事件ItemSelected(即如何正确回发到服务器),以及我需要在代码隐藏页面中实现什么来捕获该信息并调用我的OnItemSelected方法?

javascript c# asp.net user-controls

2
推荐指数
1
解决办法
2179
查看次数

是否有任何反模式名称来编写这样的代码?

下面是一些使用参数类来包含Show()方法可能参数的代码.这个FooOption类中的值不是很相关.您可以通过查看Show()下面的实现来看到这一点.我知道这是错误的代码,但有没有与此相关的反模式?

class FooOptions {
  public int? Id { get; set; }
  public string BazContext { get; set; }
  public int? BazId { get; set; }
}

class BarMgr {
  public Bar Show(FooOptions options) {
    if (options == null)
      options = new FooOptions();
    if (options.Id.HasValue)
      return svc.GetBar(options.Id.Value);
    if (!string.IsNullOrEmpty(options.BazContext) && options.BazId.HasValue)
      return svc.GetBar(options.BazContext, options.BazId.Value);
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:我知道参数对象不是反模式.根据我的经验,参数对象属性是相关的.这是我试图找到的可能的反模式.设置所有三个属性是没有意义的.

c# design-patterns anti-patterns parameter-object

1
推荐指数
2
解决办法
358
查看次数

我在哪里挂钩到WCF SOAP响应以生成要返回的对象的XML?

假设我有一个具有名字,姓氏和年龄的Person对象.我想将此person对象发送到一个Web服务,该Web服务只知道并关心具有名字和姓氏的person对象.但我希望xml代表完整的人物对象,包括要发回的年龄.

我已经有了一种机制,可以将xml存储在幕后的对象中,并且可以简单地将xml提供给WCF,但我不想使用普通的XmlSerializer.我希望能够说"这里是xml.用肥皂包裹并发送".

我打算使用WCF.我将在哪里挂钩来控制序列化?

更多细节

虽然这个问题的例子是人为的.它清楚地说明了我的问题.假设我有一个像这样的类的应用程序:

/* person A */
class Person {
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我将此传递给Web服务.Web服务知道编写的另一个Person类:

/* person B */
class Person {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该服务具有以下方法签名的方法:

Person SomeOperation(Person p);
Run Code Online (Sandbox Code Playgroud)

当我从我的应用程序调用此Web服务并将其传递给我的人A版本时,Web服务就可以接收它了.它忽略了Age属性.但是当它重新创建响应时,Age属性会消失.

我明白为什么会这样.WCF将响应反序列化为实际的c#对象,因此丢弃随请求一起发送的额外XML.因此,没有Age属性可以发回.

我有一种机制来实际使用XML作为我的对象的后备存储.如果后备存储中存在该对象不需要的XML,则它只是位于那里并且未被使用.我希望在响应中发送用作后备存储的完整XML.

如果这是一个基本的c#应用程序,我可以简单地创建一个包含FirstName和LastName属性的IBasicPerson接口,并让Person类实现接口,如下面的代码:

public interface IBasicPerson {
  string FirstName { get; set; }
  string LastName { …
Run Code Online (Sandbox Code Playgroud)

xml wcf soap xml-serialization

0
推荐指数
1
解决办法
605
查看次数