我知道这个问题一遍又一遍,但我似乎无法找到满意的答案.
组装是否应该进入GAC?这些问题:何时何时不安装到gac中以及使用GAC的优点和缺点是什么,准确地解决了这个问题,但答案非常多"建议......"或者"你应该只......".为什么???
很多GAC反对的博客似乎都是从5/6年前开始的,当时.Net的明星正在开始崛起.我们现在还在吗?当然,DLL-Hell已经成为过去,GAC支持并排安装不同版本的"相同"组件?
让我充实我的担忧.我们有越来越多的网络应用程序(到目前为止已有5个).它们的核心是通过API调用和数据库扩展对第三方应用程序的扩展.因此,显然,所有这些应用程序共享大量代码,我们正在开发一组新的核心共享库,以提高我们的质量,可维护性等.
当然,我希望这个共享功能安装一次并共享.所有关于打开维护噩梦的争论似乎都是基于一些不良纪律的世界.如果你打破了ABI,那么碰撞AssemblyVersion就足以让现有的应用程序保持正常运行.
对于不知情的人来说,GAC真的是一个蜜罐吗?我天真吗?当我驳斥"XCopy"安装失败的论点时,我是不是觉得不必要的苛刻?或者它是否有点"宗教",我应该选择看似正确的东西?
谢谢你帮我看清楚.
担
我最近需要生产一个互操作组件.经过一些谷歌搜索我发现tlbimp.exe.我的下一个问题是我的COM库没有附带.tlb文件.进一步的谷歌搜索显示,类型lib通常作为exe/dll中的资源包含在内.果然,打开VS2010中的exe显示它是lib类型,稍后右键单击我有一个tlb文件可供使用tlbimp.真棒.
然而,这不是一个非常好的过程.我将来是否需要这样做,有没有办法使用命令行从.exe中提取Type Lib(.tlb文件)?
我有一个使用相当简单的MVVM方法的C#WPF应用程序.在其中一个ViewModel中,我希望按顺序运行一系列任务,但是希望将每个异步运行到主线程.我希望能够在任务之间报告进度的粒度,但我不想在任何任务运行时阻止GUI.
是否有实现这一目标的标准方法,或"最佳实践"?
我已经实现了一些能够充分利用的东西,BackgroundWorker我感到很高兴和温和的恐惧.把整个事情搞砸的代码感觉特别是非C#ish.我觉得必须有一个更好的,或者至少是一种既定的方式来做到这一点.
非常感谢你的建议.
担
这是拼凑在一起的选项:
protected void runAsyncTask(SequentialTask seqTask)
{
if (HasErrored) return;
DoWorkEventHandler worker = (s, e) =>
{
setTaskStartStatusMessage(seqTask.TaskMessage);
ShowProgress = true;
seqTask.Task((BackgroundWorker)s);
};
ProgressChangedEventHandler progress = (s, e) =>
{
if (seqTask.TaskProgress != null)
seqTask.TaskProgress(e.ProgressPercentage, e.UserState);
};
RunWorkerCompletedEventHandler done = null;
done = (s, e) =>
{
ShowProgress = false;
if (e.Error != null)
{
HasErrored = true;
displayTaskExceptionMessage(e.Error, seqTask.TaskMessage);
}
else
{
setTaskCompleteStatusMessage(seqTask.TaskMessage);
if (seqTask.TaskComplete != null)
seqTask.TaskComplete();
}
((BackgroundWorker)s).RunWorkerCompleted -= done;
((BackgroundWorker)s).DoWork …Run Code Online (Sandbox Code Playgroud)