我正在从 csc.exe 编译(好吧,CruiseControl 是...),我需要在 GAC 中引用一个 DLL。我没有作为简单文件的这个 DLL 的正确版本,但是 GAC 中有一个正确的版本。
但是,您不能使用 csc 引用 GAC 中的程序集——您必须拥有实际文件的路径。
我发现一些参考资料声称您可以对实际文件的路径进行逆向工程,但我无法让它们工作。我启动了 Fusion 日志记录,我可以看到运行时从哪里获取文件,但是在我的参考中使用指向该位置的文件路径不起作用。
那么,您如何向 csc 提供对仅存在于 GAC 中的程序集版本的引用?
有人在数据绑定表达式中成功使用了扩展方法吗?
假设我有一个名为“GetName”的扩展方法附加到“MyClass”。
在后面的代码中,我已经验证了这一点:
MyClass myObject = new MyClass();
MyClass.GetName();
Run Code Online (Sandbox Code Playgroud)
但是,在 Web 表单中,我尝试这样做:
<%@ Import Namespace="My.Namespace" %>
Run Code Online (Sandbox Code Playgroud)
然后,在 Repeater 的 ItemTemplate 中:
<%# ((MyClass)Container.DataItem).GetName() %>
Run Code Online (Sandbox Code Playgroud)
Visual Studio 对此很满意,Intellisense 同意一切,项目就构建起来了。但是当我运行它时,我得到:
编译错误
“My.Namespace.MyClass”不包含“GetName”的定义
因此,隐藏代码将接受扩展方法,但不接受 Web 表单。我怀疑这是一个名称空间问题,但我在两个地方都导入了相同的名称空间。
我可以这样的东西:
int x = MyMethod<int>();
string y = MyMethod<string>();
Run Code Online (Sandbox Code Playgroud)
因此,一种方法基于T返回不同的类型.当然,方法中会有逻辑来确保它返回正确的东西.
我永远无法得到这样的东西来运行.它抱怨它无法将返回值强制转换为T:
public static T MyMethod<T>()
{
if(typeof(T) == typeof(Int32))
{
return 0;
}
else
{
return "nothing";
}
}
Run Code Online (Sandbox Code Playgroud) 我只是好奇这个.令我感到震惊的是,StringBuilder的功能在功能上(如果不是技术上)与Stream相同 - 它是可以添加其他数据的数据仓.
再次,只是好奇.
我有一个用C#编写的命令行EXE.它的日志解析器每晚都会研磨几GB的日志文件.
它将处理器固定在100%很长一段时间.不理想.
我怎么能"扼杀"应用程序?它可能需要多长时间,但我宁愿让它使用更少的总CPU.
是否有一些编码方法或理论使EXE变慢并减少CPU占用?我无法在它运行的环境中做任何事情(比如更改进程优先级),因此任何更改都必须在应用程序本身的代码中.
Firefox正在向我的ASP.Net网站发出重复请求.它将请求一个页面,获得响应,然后立即再次发出相同的请求(好吧,几乎相同 - 见下文).这发生在这个特定网站的每个页面上(但不是任何其他网站).IE不会这样做,但Chrome也会这样做.
我已经确认响应中没有Location标头,并且页面中没有Javascript或meta标签会导致页面被重新请求(如果其中任何一个都是真的,IE也会重新请求页面) .
我已在多台计算机上的多个Firefox安装上确认了此行为.版本各不相同,但都是3.x.
两个请求之间的唯一区别是Accepts标头.对于第一个请求,它看起来像这样:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)
对于第二个请求,它看起来像这样:
Accept: */*
Run Code Online (Sandbox Code Playgroud)
在所有情况下,Content-Type响应头是:
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
其他奇怪的东西 - 即使Firefox请求页面两次,它使用第一个响应并丢弃第二个响应.我把一个计数器放在一个页面上,该页面随着每个请求递增.我可以看到回复(通过查尔斯代理).Firefox将首次获得"1",第二次获得"2".但由于某种原因,它会显示"1".
Chrome表现出完全相同的行为.考虑到Accepts标题的不同,我怀疑这是一个协议级问题,但我以前从未见过这个问题.
我为Lucene.Net构建了一个自定义收集器,但我无法弄清楚如何订购(或页面)结果.每次调用Collect时,我都可以将结果添加到内部PriorityQueue中,我理解这是正确的方法.
我扩展了PriorityQueue,但它在创建时需要一个大小参数.您必须在构造函数中调用Initialize并传入最大大小.
但是,在收集器中,搜索器在收到新结果时只调用Collect,因此我不知道在创建PriorityQueue时有多少结果.基于此,我无法弄清楚如何使PriorityQueue工作.
我意识到我可能在这里遗漏了一些简单的东西......
我需要一个.Net ORM,我听到了一些有关此事的好消息.我过去曾经运行过NHibernate,但这似乎让很多东西变得更容易了.
然而,有两件事让我有些紧张.
是否有人使用它,他们是否将它推荐给生产环境?它还在积极发展吗?
具体来说,使用ActiveRecord而不是简单的'ol NHibernate是否值得?
将一个组件捆绑到另一个组件中的最佳做法是什么?我有一个我正在分发的程序集,但是我在其中使用了几个第三方程序集,而且我不想分发多个程序集.
所以,我想将几个程序集编译成我分发的程序集,以便它们只是内置的.
这是最好的做法是什么?我知道我可以将其他程序集放在我的项目中并将它们设置为"嵌入式资源",但是如何让它们再次退出,这意味着如何将它放到我可以实例化嵌入式程序集中定义的类的地方?
我见过Assembly.Load方法,但似乎想要一个文件路径.是否有另一种方法来加载嵌入式程序集?你如何告诉Load方法汇编的位置?
加载嵌入式程序集后,它是否只是神奇地在范围内,我可以自由地实例化类吗?
在这种情况下,如何避免重复的绑定项目:
页面上有一个数据绑定控件(在这种情况下为DropDownList,尽管我认为这并不重要)。它的AppendDataBoundItems设置为“ true”。在代码中的某个位置,设置了DataSource并调用了DataBind。因此,此控件已明确绑定。
您还需要在页面上绑定其他内容,因此您可以调用Page.DataBind。
现在,您的数据绑定控件中有重复的项目。它被(1)明确绑定,然后(2)Page.DataBind再次绑定它。由于AppendDataBoundItems为true,因此第二个绑定将追加到第一个绑定,并且最终会使项目增加一倍。
有两个限制:
控件上对DataBind的显式调用是通过一些集中的代码完成的,更改起来很麻烦。
我真的需要(通过Page.Databind())绑定其余页面的聚合,因为有太多其他数据绑定元素无法单独执行,而无需编写大量单独的调用。
我需要像这样的方法... Page.DataBindExceptIfIfHaveAlreadyBeenBoundDuh()
c# ×5
asp.net ×2
data-binding ×2
activerecord ×1
assemblies ×1
castle ×1
csc ×1
firefox ×1
generics ×1
http ×1
http-headers ×1
lucene ×1
lucene.net ×1
mime-types ×1
nhibernate ×1
orm ×1
reference ×1
stream ×1
webforms ×1