小编Chr*_*ter的帖子

在哪里举办开源项目:CodePlex,Google Code,SourceForge?

我一直在阅读有关"如何推广开源项目"的SO回答问题的积压.毫不奇怪,许多答案将人们指向SoureForge/FreshMeat和其他网站等以及博客和诸如此类的东西.这开始让我想到哪里是举办项目的最佳地点,为什么?

由于我的第一个项目目前托管在CodePlex上,我开始浏览Google搜索结果,以收集有关每个项目的优缺点的信息; 然而,我发现的比较相当过时(2岁以上).

http://www.stum.de/2008/12/13/sourceforge-vs-codeplex/
http://www.developmentnow.com/blog/2006/11/codeplex-vs-sourceforge/
http:// www. spacesocket.com/forum/thread-6654.html
等...

所以接下来的问题就变成了"我应该在多个站点上托管我的项目",以下帖子提供了预期的答案(谢天谢地!因为这样做很难维护).

在几个站点托管一个开源项目

基于CodePlex,GitHub,Google Code,SourceForge等各种开源托管网站的现状,是否有一个网站的显着优点/缺点?即,我应该坚持使用CodePlex还是我错过了不使用其中一种替代品?是否会为一个新的未知项目带来更多流量?

我计划更详细地探索每个网站,看看它们都提供了什么,但鉴于对SO的优秀人员的广泛了解,我想先从这个问题开始.

更新

根据下面的erjiang答案......我目前正在使用Mercurial进行版本控制,我对TFS以外的任何东西都持开放态度.此外,我目前的项目只是我的开发,但未来的项目可能是协作的,所以值得考虑...

hosting open-source

166
推荐指数
2
解决办法
4万
查看次数

真的想在C#中喜欢CodeContracts

我终于在.NET 3.5/4.0框架中添加了所有新内容.最近几天我一直在使用CodeContracts,我真的很努力喜欢它们.我很好奇其他人对C#中CodeContracts的实现有何看法?具体来说,人们如何组织诸如接口的合同类,合同不变量的合同方法等等?

我喜欢合同提供的验证,乍一看它们看起来很棒.通过一些简单的行,我可以在运行代码之前获得一些很好的构建检查.不幸的是,我很难理解代码契约在C#中实现的方式,它们使我的代码比记录合同更加混乱.为了充分利用合同,我在假设和断言等方面乱丢我的代码(我知道有些人会说这是好事); 但正如我下面的一些例子所示,它将一条简单的行转换为4或5行,并且在我看来并没有真正增加其他方法(即断言,异常等)的足够价值.

目前,我最大的挫折是:

界面合同:

[ContractClass(typeof(IInterfaceContract))]
  public interface IInterface
  {
    Object Method(Object arg);
  }

  [ContractClassFor(typeof(IInterface))]
  internal abstract class IInterfaceContract
  {
    private IInterfaceContract() { }

    Object IInterface.Method(Object arg)
    {
      Contract.Requires(arg != null);
      Contract.Ensures(Contract.Result<Object>() != null);
      return default(Object);
    }
  }
Run Code Online (Sandbox Code Playgroud)

这感觉就像这样一个cludge对我来说,我希望有一个更清洁的记录要求的方式,无论是通过属性或某种形式的内置的语言支持.我有这样的事实来实现,实现我的接口一个抽象类,只是让我可以指定合约似乎有些单调乏味的最好的.

代码膨胀:

typeof(Action<>).MakeGenericType(typeof(Object);
Run Code Online (Sandbox Code Playgroud)

需要几个假设才能验证现有的信息.我明白,所有的分析都知道的是,它是在型操作,因此必须在有限的知识工作,但它仍然让我很沮丧的是一个单一的代码行要求我重新写为

var genericAction = typeof(Action<>);

Contract.Assume(genericAction.IsGenericType);
Contract.Assume(genericAction.GetGenericArguments().Length == 1);

genericAction.MakeGenericType(typeof(Object));
Run Code Online (Sandbox Code Playgroud)

只是为了记录事情(是的,我知道我可以使用ContractVerificationAttribute来关闭方法/类等,或者使用SuppressMessageAttribbute来定位特定的消息,但这似乎打败了目的,因为你的代码很快就会被抑制等等所困扰.

另外,以案例为例

  public class MyClass
    : IInterface
  {
    private readonly Object _obj;

    public Object Property
    {
      get
      {
        Contract.Ensures(Contract.Result<Object>() != null);
        return _obj;
      }
    }

    public MyClass(Object obj) …
Run Code Online (Sandbox Code Playgroud)

c# code-contracts

59
推荐指数
3
解决办法
1万
查看次数

jQuery自动完成触发器更改事件

如何以编程方式触发jQuery UI的AutoComplete更改事件处理程序?

挂钩

$("#CompanyList").autocomplete({ 
    source: context.companies, 
    change: handleCompanyChanged 
});
Run Code Online (Sandbox Code Playgroud)

杂项尝试迄今为止

$("#CompanyList").change();
$("#CompanyList").trigger("change");
$("#CompanyList").triggerHandler("change");
Run Code Online (Sandbox Code Playgroud)

基于其他答案它应该工作:

如何在代码中触发jQuery更改事件

jQuery自动完成和更改问题

JQuery自动完成帮助

当我通过浏览器手动与AutoComplete输入交互时,change事件按预期触发; 但是我想在某些情况下以编程方式触发更改事件.

我错过了什么?

jquery-ui autocomplete

48
推荐指数
5
解决办法
13万
查看次数

在ASP.NET中使用Messenger Connect客户端库时出现Javascript错误

我在现有Sitefinity站点内实现新的Messenger Connect功能时遇到问题,无法使用Live ID启用客户端登录.

也就是说,当我使用以下代码实现客户端功能时:

<head runat="server">
  <script type="text/javascript" src="http://js.live.net/4.1/loader.js"></script>
</head>
<body>
  <form runat="server" id="form1">
    <asp:ScriptManager ID="ScriptManager1" runat="server"/>
    <wl:app
        client-id="<%= ConfigurationManager.AppSettings["wl_wrap_client_id"] %>"
        scope="WL_Profiles.View"
        callback-url="<%= ConfigurationManager.AppSettings["wl_wrap_client_callback"] %>?wl_session_id=<%=SessionId %>"
        channel-url="/channel.htm">
    </wl:app>
Run Code Online (Sandbox Code Playgroud)

...我在Firebug中遇到三个错误,我无法正确识别:

Sys.ArgumentTypeException:"Sys._Application"类型的对象无法转换为"Sys.IDisposable"类型.参数名称:对象

(在ScriptResource.axd?d = ....第4993行)

Sys.Application._doInitialize不是一个函数

(在MicrosoftAjaxBase.js第1行)

Sys.InvalidOperationException:脚本"MicrosoftAjaxGlobalization.js"已被多次引用.如果显式引用Microsoft AJAX脚本,请将ScriptManager的MicrosoftAjaxMode属性设置为Explicit.

(在ScriptResource.axd?d = ....第984行)

仅当我loader.js从js.live.net 包含脚本时才会触发错误.

编辑:似乎错误不一定按该顺序触发.刷新页面似乎打乱这些错误和/或引入其他的,如Sys.ParameterCountExceptionScriptResource.axd?...上线1842,例如.

javascript asp.net asp.net-ajax sitefinity liveid

37
推荐指数
1
解决办法
1978
查看次数

每个解决方案的单一与多单元测试项目?

我的产品组件和单元测试组件之间通常有1:1的映射关系.我通常会尝试保持较低的组件总数,典型的解决方案可能看起来像...

  • 客户端(包含视图,控制器等)
  • Client.Tests
  • 通用(包含数据/服务合同,常用功能等)
  • Common.Tests
  • 服务器(包含域,服务等)
  • Server.Tests
  • Server.WebHost

最近在工作中,人们提到只有一个单元测试项目,而不是他们正在测试的程序集.我知道这一天,如果你在构建中运行NCover等(当然不再重要),这会让生活变得更轻松.

单个与多个UnitTest项目背后的一般理性是什么?除了减少解决方案中的项目数量之外,还有一个具体的理由可以采用这种方式吗?我觉得这可能是那些"偏好"的东西之一,但谷歌搜索并没有出现太多.

.net unit-testing

25
推荐指数
3
解决办法
5486
查看次数

如何扩展knockout observables以从绑定中读取默认值?

在构建新的MVC4应用程序时,我终于找到了开始学习KnockoutJS的时间.我试图找出从已在视图中设置的默认值初始化可观察值的最佳方法.

这是一个人为的例子,但我想直接向视图呈现一个observable的默认值,如下所示:

<input type="hidden" 
       value="@Model.SomeValue"
       data-bind="value: myObservableReference"/>
Run Code Online (Sandbox Code Playgroud)

我知道默认值通常通过以下方式初始化:

model.myObservableReference = ko.obervable("SomeValue");
Run Code Online (Sandbox Code Playgroud)

但是,我想找到一种方法来扩展初始化,使得:

model.myObservableReference = ko.obervable();
Run Code Online (Sandbox Code Playgroud)

如果存在值,则会从绑定中读取现有值.

至于我到目前为止设法让我的KnockoutJS代码完全不知道剃刀世界,我想避免以下的邋::

model.myObservableReference = ko.obervable(@Model.SomeValue);
Run Code Online (Sandbox Code Playgroud)

我猜这将通过扩展器或自定义绑定器处理,但如果有人能指出我正确的方向,将不胜感激.

asp.net-mvc-4 knockout.js

17
推荐指数
1
解决办法
8063
查看次数

JavaScript代码合同库?

我刚刚开始一个新的Web应用程序,我想在我的JavaScript中实现某种形式的contract'esque样式验证.我做了一些快速的谷歌搜索,并遇到了JsContact,但语法不是我想到的.有人知道其他图书馆吗?

我想我希望语法类似于

String.prototype.padLeft = function(c, width) {
  Verify.value(c).isRequired().isNotNull().isChar();
  Verify.value(width).isRequired().isNotNull().isNumber().greaterThan(0);

  ...

  Verify.value(result).isNotNull();

  return result;
};
Run Code Online (Sandbox Code Playgroud)

虽然将我自己的库与我想要的语法/方法放在一起不会花费很长时间,但如果其他人已经完成了工作并且它足够接近,那么它将节省我一些时间.提前致谢.

UPDATE

我将没有时间在今天下午工作,所以我会再花几个小时来看看是否有人有任何建议.如果没有,我会发布我在某处创建的任何内容作为下面的答案供其他人参考,如果他们愿意的话.

我还考虑了一些有意义的API,我现在正在考虑像(人为的例子):

 function searchUser(firstName, middleInit, lastName) {
   Verify.value(firstName).isString().matching(/\w+/);       // Must have value
   Verify.value(middleInit).whenNotNull().isChar();          // May be null, but not undefined
   Verify.value(lastName).isString().withMinimumLengthOf(2); // Must have value

   ...
 }

 function syncTime(serverTime, now) {
   Verify.value(serverTime).isDate();         // Must have value.
   Verify.value(now).whenDefined().isDate();  // May be undefined, but not null.

 }
Run Code Online (Sandbox Code Playgroud)

我当前的想法是容忍NULL或UNDEFINED值是非典型的(至少对我而言?),而不是显式指定值.isNotNull()你实际上会禁用.whenDefined()或.whenNotNull()的规则如上所示.我可能会在UNDEFINED上使.whenNotNull()没有错误,但我认为NULL与UNDEFINED是一个重要的区别; 我们会看到......所有其他方法都很典型......想法?评论?

javascript code-contracts

14
推荐指数
1
解决办法
1713
查看次数

NHibernate SaveOrUpdate子集合未使用Identity ID更新

我显然遗漏了一些东西(希望很明显),到目前为止我还没跟谷歌好运.

我有一个父子关系映射如下

简化的父图

  public sealed class ParentMap : ClassMap<ParentEntity>
  {
    public ParentMap()
    {
      Table("Parent");
      Component(x => x.Thumbprint);
      Id(x => x.Id).GeneratedBy.Identity();

      Map(x => x.ServeralNotNullableProperties).Not.Nullable();

      HasMany(x => x.Children).KeyColumn("ChildId")
                              .Inverse()
                              .LazyLoad()
                              .Cascade
                              .AllDeleteOrphan();

      References(x => x.SomeUnrelatedLookupColumn).Column("LookupColumnId").Not.Nullable();
    }
  }
Run Code Online (Sandbox Code Playgroud)

简化的儿童地图

  public sealed class ChildMap : ClassMap<ChildEntity>
  {
    public ChildMap()
    {
      Table("Child");
      Component(x => x.Thumbprint);
      Id(x => x.Id).GeneratedBy.Identity();

      Map(x => x.MoreNotNullableProperties).Not.Nullable();

      References(x => x.Parent).Column("ParentId").Not.Nullable();
    }
  }
Run Code Online (Sandbox Code Playgroud)

简化的服务方法步骤

然后我有一个服务方法,它检索Parent并通过一些域方法添加一个新的Child.底层的NHibernate代码归结为:

1)在WCF AfterReceiveRequest(IDispatchMessageInspector)上打开的会话

_sessionFactory.OpenSession();
Run Code Online (Sandbox Code Playgroud)

2)通过.Query检索父项的现有实例

_session.Query<ParentEntity>()
        .Where(item => item.Id == parentId)
        .Fetch(item => item.SomeLookupColumn) …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate fluent-nhibernate

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

帮助ASP.NET MVC HtmlHelper API设计

我正在为ASP.NET WebForms/MVC开发一个运行时复合资源库.我通过WebControls支持标准的ASP.NET WebForms,并且最近还添加了对ASP MVC Html Helpers的支持.我目前支持WebForms WebControls的一个功能是"部分"资源定义的概念,其中资源可以通过主/视图页面等组合.

在实现MVC等价物时,我不确定最佳做法是什么?我目前倾向于设计类似于:

母版页

<% using (Html.CreateCompositeResourcePartContext())
   {
     Html.CompositeCssResourcePart(
       "ResourceName", 
       new[] { "/Styles/SharedStyle1.css", "/Styles/SharedStyle2.css" }
     );
     %>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
<% } %>
Run Code Online (Sandbox Code Playgroud)

这将在头部ContentPlaceholder周围创建一个"上下文"包装器.

查看页面

<asp:Content ID="HeadContentPlaceholder" ContentPlaceHolderID="head" runat="server">
  <% Html.CompositeCssResourcePart(
     "ResourceName", 
     new[] 
     {
       "/Styles/PageStyle5.css",
       "/Styles/PageStyle6.css",
       "/Styles/PageStyle7.css"
     }) %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

因此,任何视图页面都可以扩展部分资源定义,如上所示.

我有的问题:

1)与我的所有其他HtmlHelper不同,这些扩展不会立即写出HTML片段,而是等到处理上下文.这些扩展是否应该取决于ViewContext(或其他一些对象)?

2)我个人认为"使用"的概念有意义包装代码块而不是单独的BeginCompositeResourcePartContext/EndCompositeResourcePartContext调用,你同意吗?如果不是,单独的方法调用有什么好处?

任何有关上述内容的反馈将不胜感激.如果需要更多详细信息,请告知我们.

编辑

为了澄清......主页面头部内的块和视图页面中的后续引用将被合并到一个资源中.所以当处理CompositeResourcePartContext的上下文时,所有SIX文件只被合并到一个css文件中并写成单个链接TAG(或脚本,css sprite等)

<link rel="stylesheet" type="text/css" href="/MyMergedStyleSheet.css" />
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc

7
推荐指数
1
解决办法
503
查看次数

Visual Studio的线程窗口如何识别"主线程"

我可能会遗漏一些明显的东西,但幽默我......

我总是喜欢在我的应用程序中命名重要的线程,因为它对调试/日志记录等有用.如果Thread.CurrentThread.Name在程序启动时查询主线程的名称,您将返回null.因此,我始终确保首先发生的是主线程(以及任何其他相关线程)被分配一个有意义的名称以供将来参考.

直到今天我才真正考虑过它,但在查看Visual Studio中的Threads窗口时(在分配任何线程名称之前等),分配了一个特殊类别'Main Thread'以及一个也写为"Main"的伪名称线程"(但这不是实际的线程名称).

从管理角度看,.NET不会暴露在任任何有意义System.Threading.ThreadSystem.Diagnostics.ProcessThread标识应用程序的主线程(至少,我可以看到).我查看了Windows进程和线程函数列表,再次,我没有看到任何明显的东西(也许是OpenThread?).

好奇,如果有人知道线程窗口如何分配特殊类别"主线程"?

.net debugging multithreading visual-studio

7
推荐指数
1
解决办法
1048
查看次数

实现开源库:如何处理日志记录?

我正在我正在开发的开源库中实现日志记录支持.大多数第三方库似乎明确选择了"首选"日志库,如Log4NetNLog等,然后要求其库的消费者"处理它".值得庆幸的是,我们有一个像Common.Logging这样的库,可以在我们的消费应用程序中解决这个问题,这些应用程序统一了这些第三方库日志记录实现.

我打算尝试避免从我自己的开源库引用另一个第三方库,以避免将另一个程序集引用引入其他人的应用程序.也许这不是一个问题,我应该停在那里?

假设有些人认为过多的程序集引用令人讨厌(并且因为有人会提到它),我个人认为,我不喜欢在这种情况下使用ILMerge,因为你可能很容易有几个使用Log4Net的库,如果它们各自ILMerged在程序集中,在我看来,它只是膨胀了应用程序的大小.

为此,我正在考虑实现和公开一个LogBridge,以便我的库的用户可以根据需要挂钩我的日志记录调用(默认情况下会关闭).另外,请允许我强调,我不是在讨论实现自己的日志记录框架,只是确保在有人关注它的情况下公开日志记录.我认为消费实现会出现类似于:

public class SomeSetupClass 
{
  private void SomeSetupMethod()
  {
    var log = LogManager.GetLogger("LogSourceName");
    var logBridge = new LogBridge()
                      {
                        DebugEnabled = log.IsDebugEnabled,
                        InformationEnabled = log.IsInfoEnabled,
                        WarningEnabled = log.IsWarnEnabled,
                        ErrorEnabled = log.IsErrorEnabled,
                        CriticalEnabled = log.IsFatalEnabled
                      };

    logBridge.DebugMessageReceived += (sender, e) => log.Debug(e.Message);
    logBridge.InformationMessageReceived += (sender, e) => log.Info(e.Message);
    logBridge.WarningMessageReceived += (sender, e) => log.Warn(e.Message);
    logBridge.ErrorMessageReceived += (sender, e) => log.Error(e.Message);
    logBridge.CrticalMessageReceived += (sender, e) => log.Fatal(e.Message);      }
  }
}
Run Code Online (Sandbox Code Playgroud)

这种方法有意义吗?在度假太久之后,我是不是在想这个,我应该参考 …

.net logging

5
推荐指数
1
解决办法
390
查看次数

ThreadAbortException是否仍然强制执行finally(try/catch)部分中的代码?

我有一个System.Timers.Timer定时器,它AutoReset被设置为false.我使用a try/finally来确保Start它的结束时callback的计时器(我使用计时器这种方式来防止重复callback执行).码:

// inside timer call back
try
{
    // Do something
}
finally
{
    timer.Start(); // Is this line always executed?
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如果执行线程是什么会发生什么Aborted?该finally部分是否仍然执行或者没有线程来运行该部分?

c# timer try-catch-finally threadabortexception

5
推荐指数
2
解决办法
1285
查看次数