我一直在阅读有关"如何推广开源项目"的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以外的任何东西都持开放态度.此外,我目前的项目只是我的开发,但未来的项目可能是协作的,所以值得考虑...
我终于在.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) 如何以编程方式触发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)
基于其他答案它应该工作:
当我通过浏览器手动与AutoComplete输入交互时,change事件按预期触发; 但是我想在某些情况下以编程方式触发更改事件.
我错过了什么?
我在现有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.ParameterCountException
在ScriptResource.axd?...
上线1842,例如.
我的产品组件和单元测试组件之间通常有1:1的映射关系.我通常会尝试保持较低的组件总数,典型的解决方案可能看起来像...
最近在工作中,人们提到只有一个单元测试项目,而不是他们正在测试的程序集.我知道这一天,如果你在构建中运行NCover等(当然不再重要),这会让生活变得更轻松.
单个与多个UnitTest项目背后的一般理性是什么?除了减少解决方案中的项目数量之外,还有一个具体的理由可以采用这种方式吗?我觉得这可能是那些"偏好"的东西之一,但谷歌搜索并没有出现太多.
在构建新的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)
我猜这将通过扩展器或自定义绑定器处理,但如果有人能指出我正确的方向,将不胜感激.
我刚刚开始一个新的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是一个重要的区别; 我们会看到......所有其他方法都很典型......想法?评论?
我显然遗漏了一些东西(希望很明显),到目前为止我还没跟谷歌好运.
我有一个父子关系映射如下
简化的父图
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) 我正在为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) 我可能会遗漏一些明显的东西,但幽默我......
我总是喜欢在我的应用程序中命名重要的线程,因为它对调试/日志记录等有用.如果Thread.CurrentThread.Name
在程序启动时查询主线程的名称,您将返回null
.因此,我始终确保首先发生的是主线程(以及任何其他相关线程)被分配一个有意义的名称以供将来参考.
直到今天我才真正考虑过它,但在查看Visual Studio中的Threads窗口时(在分配任何线程名称之前等),分配了一个特殊类别'Main Thread'以及一个也写为"Main"的伪名称线程"(但这不是实际的线程名称).
从管理角度看,.NET不会暴露在任任何有意义System.Threading.Thread
或System.Diagnostics.ProcessThread
标识应用程序的主线程(至少,我可以看到).我查看了Windows进程和线程函数列表,再次,我没有看到任何明显的东西(也许是OpenThread?).
好奇,如果有人知道线程窗口如何分配特殊类别"主线程"?
我正在我正在开发的开源库中实现日志记录支持.大多数第三方库似乎明确选择了"首选"日志库,如Log4Net或NLog等,然后要求其库的消费者"处理它".值得庆幸的是,我们有一个像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)
这种方法有意义吗?在度假太久之后,我是不是在想这个,我应该参考 …
我有一个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
部分是否仍然执行或者没有线程来运行该部分?
.net ×4
c# ×4
javascript ×2
asp.net ×1
asp.net-ajax ×1
asp.net-mvc ×1
autocomplete ×1
debugging ×1
hosting ×1
jquery-ui ×1
knockout.js ×1
liveid ×1
logging ×1
nhibernate ×1
open-source ×1
sitefinity ×1
timer ×1
unit-testing ×1