我们遇到了一个我以前从未体验过的有趣问题.我们在Visual Studio 2008 SP1中有一个大规模生产的ASP.NET 3.5 SP1 Web App项目,它使用网站部署项目进行编译和部署.去年一切都运行良好,直到昨天办理登机手续后,应用程序开始严重失败BadImageFormatException
.
有问题的登记不会改变任何特别特别的错误,错误来自应用程序的区域甚至没有改变.使用Reflector我们检查了有问题的方法,发现代码中有垃圾字符串(.NET Reflector幽默地解释为中文字符).我们一直在几台机器上重现这一点,因此它似乎与硬件无关.
进一步检查显示,在部署期间用作aspnet_merge.exe输入的程序集中不存在这些垃圾字符串.
aspnet_merge.exe/Web部署项目输出程序集属性:
- 将所有输出合并到单个程序集
- 将每个单独的文件夹输出合并到其自己的程序集
- 将所有页面和控制输出合并到单个装配中
- 为每个页面和控件输出创建单独的程序集
在Web部署项目属性中,如果我们将合并选项设置为第一个选项("将所有输出合并到单个程序集"),我们会遇到问题,但所有其他选项都可以正常运行!
我的问题:有谁知道为什么会这样?aspnet_merge.exe的功能是否有大小限制(生成的合并DLL大约为19.3 MB)?合并WAP的输出还有其他已知问题吗?
如果任何汇编格式/ aspnet_merge.exe专家知道任何此类限制,我会很高兴.对我来说就像一个25MB的程序集,虽然很大,但并不令人发指.
asp.net ilmerge assemblies aspnet-merge badimageformatexception
我正在使用原生作为有理数提供的数据.我有一个灵活的通用C#类,它在C#中精美地表示这些数据,并允许转换为许多其他形式.不幸的是,当我转身并希望将其存储在SQL中时,我有几个解决方案,但没有一个是非常令人满意的.
这是一个例子.我有2/3
我new Rational<int>(2, 3)
在C#中轻松处理的原始值.我想到的用于将其存储在数据库中的选项如下:
就像一个十进制/浮点,即值= 0.66666667
各种精度和精确度.
优点:这允许我查询数据,例如查找值<1.
缺点:它具有精确性的损失,当我在UI中显示这个简单的值时它很难看.
存储为两个精确的整数字段,例如,分子= 2
,分母= 3
各种精度和精确度.
优点:这使我能够精确地表示原始值,并在以后以最简单的形式显示它.
缺点:我现在有两个字段来表示这个值,查询现在很复杂/效率低,因为每个查询都必须执行算术,例如find numerator/denominator <1.
序列化为字符串数据,即"2/3"
.我将能够知道最大字符串长度并且有一个varchar可以容纳这个.
优点:我回到了一个领域,但有一个确切的代表.
缺点:查询几乎被破坏并支付序列化成本.
#1和#2的组合. 优点:轻松/高效地查询值范围,并在UI中具有精确值. 缺点: 三个字段(!?!)保存一个数据,必须保持多个表示同步才能打破DRY
#1和#3的组合. 优点:轻松/高效地查询值范围,并在UI中具有精确值. 缺点:回到两个字段来保存一个数据,必须保持多个表示同步,这会破坏DRY,并且必须支付额外的序列化成本.
有没有人有另一个开箱即用的解决方案比这些更好?还有其他我不考虑的事情吗?有没有一种相对简单的方法在SQL中做到这一点,我只是没有意识到?
我正在使用WPF作为图像大小调整管道,它在.NET v3.5下运行良好.我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有很多别名.没有任何图像管道代码已更改.
在v3.5和v4.0之间是否更改了默认WPF设置?
如何在WPF中控制调整大小的位图图像的抖动?
我使用BitmapImage
,DrawingVisual
,DrawingContext
,RenderTargetBitmap
,BitmapEncoder
,和BitmapFrame
,但我没有看到相关的抖动的任何属性.GDI +有很多设置,所以我猜我错过了什么.
更新:我看到的所有解决方案似乎都假设是Window对象或XAML环境.这在没有UI的Windows服务中运行.我需要一种以编程方式影响此设置的方法.
我特意从GDI +切换到WPF,因为GDI +在长期运行的流程(如服务和Web应用程序)中存在内存泄漏.
我正在寻找JAX-RS(JSR-311)中的机制,以便我能够提炼出一些我的应用程序特有的横切关注点.例如,我的应用程序具有为每个请求查找或构建的特定上下文.我希望能够在集中的位置执行这种类型的逻辑,然后以某种方式附加到上下文,以供各种资源用于请求的其余部分.如果我只对一些URL子集执行这些类型的操作会更好.
JAX-RS为路径段,cookie,标题等提供的默认注入是很好的但是那些部分的自定义解释呢?我真的不想每次需要时都要构建它.我宁愿有办法指定它是如何构建的,然后只是将上下文组件作为资源方法的一部分注入.
有没有这样的钩子?我可以操纵提供者模型来执行此操作吗?顺便说一句,我希望尽可能长时间保持与实现无关(Jersey,RESTEasy等).
提前感谢您的任何见解.
我有一个非常奇怪的情况,我的SAX ContentHandler被XMLReader传递给错误的属性.正在解析的文档是UTF-8,XML属性中包含多字节字符.似乎发生的是每次调用我的处理程序时都会累积这些属性.因此,它们不是连续传递,而是连接到前一个节点的值.
以下是使用公共数据(维基百科)演示此示例的示例.
public class MyContentHandler extends org.xml.sax.helpers.DefaultHandler {
public static void main(String[] args) {
try {
org.xml.sax.XMLReader reader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
reader.setContentHandler(new MyContentHandler());
reader.parse("http://en.wikipedia.org/w/api.php?format=xml&action=query&list=allpages&apfilterredir=redirects&apdir=descending");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) {
if ("p".equals(qName)) {
String title = attributes.getValue("title");
System.out.println(title);
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:这个完整的例子产生(对于粗俗的输出向任何广东话者道歉):
Run Code Online (Sandbox Code Playgroud)
有没有人知道发生了什么以及如何解决它?文档中的内容与我通过此代码段进行调试时发生的情况不符.
我在Eclipse中有一个项目(Indigo,但在Helios中类似),其中有一些文件可以在src/main/resources
其中生成*.java源文件target/generated-sources/xyz
.项目设置已启用"自动构建",因此无论何时编辑和保存这些资源文件,都会*.java
生成相应的文件.我已经添加target/generated-sources/xyz
了项目Build Paths.一切都很完美.
问题是生成的*.java
文件的更改不一致地重建.如果我在编辑器中打开了其中一个文件,那么它会注意到它已更改并询问我是否要重新加载它.重新加载*.java
文件足以让它识别它已更改并触发重建.如果我没有打开它,它不会自动获取更改.
关于我能做些什么来让Eclipse(最好是Indigo)知道这些生成的文件正在更新的任何想法?或者更好的是告诉它直接监控这些文件夹?
谢谢.
AmazonDynamoDBClient
我很好奇Java SDK 中主要 DynamoDB 入口点的线程安全性和可重用性是什么?我注意到 JavaDocs 中的以下声明DynamoDBMapper
:
“这个类是线程安全的,可以在线程之间共享。它也非常轻量级,所以不需要。”
由于DynamoDBMapper
引用了AmazonDynamoDBClient
,这是否意味着AmazonDynamoDBClient
是相似的?
我还想我在某个地方看到鼓励保留和共享,AWSCredentials
因为它可以更好地管理节流和会话?由于凭证是 的主要依赖项AmazonDynamoDBClient
,这也可能支持它具有更长的生命周期?
我有一个可能长达100ms的任务,我想在开始处理请求时就开始,并在以后需要时获取结果。我不想以此数量来阻止和扩展每个请求。
在普通的Java应用程序中,我将创建一个,ExecutorService
并Callable<T>
使用将其作为来运行,Future<T>
以便稍后获得结果。
由于Tomcat维护自己的线程池,我是否应该尝试与之协调?换句话说,我的ExecutorService池是否与Tomcat的线程竞争?这是问题吗?以某种方式背负到Tomcat的池是否有优势?
来自具有类似经验的人的任何建议将不胜感激。另外,我现在对添加其他依赖项(例如Spring等)不感兴趣。
我在我的一个单元测试中遇到了一个奇怪的问题,我在JavaScript中得到了意想不到的舍入结果:
(2.005).toFixed(2)
// produces "2.00"
(2.00501).toFixed(2)
// produces "2.01"
Run Code Online (Sandbox Code Playgroud)
最初我怀疑这是一个Webkit唯一的问题,但它在Gecko中重复,这对我来说意味着它是ECMA-262或IEEE-754的预期副作用.我假设2.005的二进制表示是如此之少?或者,ECMA-262是否指定了循环到均衡的方法toFixed
?
任何人都想要了解一下在幕后发生的事情只是为了让我安心吗?
更新:感谢您的评论.
我应该补充一点,让我有点紧张的事情之一是在Webkit dtoa.cpp
中快速搜索中发现的评论,这似乎意味着有多种路径可以进行四舍五入,而开发人员并不确定它是如何工作的,包括相关的FIXME
:
https://trac.webkit.org/browser/trunk/Source/WTF/wtf/dtoa.cpp#L1110
而且,并不是说它意味着很多,但是IE9按照我的预期对其进行了舍入,暗示它要么不是ECMA-262的一部分,要么就是它们有一个bug.
我执行某些数据类型转换,我需要代表uint
,long
,ulong
并decimal
为IEEE 754个浮点值.我希望能够在执行转换之前检测IEEE 754数据类型是否包含该值.
一个强力的解决方案是将一个试图捕捉包裹在一个演员周围,以寻找双倍OverflowException
.阅读某些CLR文档意味着某些转换只是默默地更改值而没有任何异常.
有没有任何万无一失的方法来做这个检查?我正在寻求完整性而非易于实施.我有一种感觉,我将仔细阅读IEEE 754规范并仔细检查matissa和exponent ......
我应该补充一点,我最关心的是准确地表示整数,浮点精度的损失是次要问题(但仍值得考虑).
编辑: Int32能够完全表达为IEE-754.此外,Decimal
数据类型也是问题的一部分.
重要更新:如果您提到这个问题,您还应该阅读这个问题:IEEE-754双(64位浮点)与长(64位整数)重访
它注意到答案中的一个缺陷,其中一些非常大的值也能够由IEEE-754精确表示.虽然这可能意味着该值将正确地往返,为了我的原始目的(它将往返JavaScript)它不会.
此外,CLRs System.Double类型中似乎存在一个错误,因为它没有正确地允许这些值进行往返.
我有一个C#类需要IEnumerable<T>
在一堆方法中处理一系列items(),所以我不能简单地foreach
在一个方法中.我打电话给它.GetEnumerator()
并传递它IEnumerator<T>
,它很有效,在循环一个序列时给了我所需的灵活性.
现在我想让其他人在这个过程中添加逻辑.最自然的方法是为它们提供一个接受方法的接口IEnumerator<T>
.简单,完成,它的工作原理.
但我担心这是一种反模式.他们必须知道IEnumerator<T>
已经.MoveNext()
调用过,所以他们可以简单地访问.Current
.另外,我没有看到IEnumerator<T>
在接口中使用的任何先例.
IEnumerator<T>
自身?更新:正如我在下面的评论中提到的:我想要的是某种通用Stream<T>
.我需要能够有效地看到下一个项目(IEnumerator.Current
- > .Peek()
)并使用它(IEnumerator<T>.MoveNext()
- > .Pop()
).
我用过,IEnumerator<T>
因为它明智地符合法案界面.我喜欢在适合时使用常见的BCL类型,但似乎我在滥用这个类型.
所以问题3)是否有适合这种需要的课程?或者我应该创建自己的流,懒惰地执行IEnumerator<T>
内部?然后它将被完全封装.我不想使用许多现有的集合,因为它们有内部存储,而我希望存储是IEnumerable<T>
iteslf.
好吧,这听起来像是共识是这样做,IEnumerator<T>
往往是一个ValueType
以及不知道先验状态,IEnumerator<T>
通常是一个坏主意传递它.
我听过的最好的建议是创建我自己的类,它会被传递.还有其他建议吗?
我正在拆分N层堆栈以允许层的独立扩展,更好的部署独立性,并且我想知道人们当前选择什么样的服务边界通信技术.
服务本身和服务的所有"客户"将通过内部网络相互访问,目前都是.NET 3.5 SP1(Windows Services 3.5,ASP.NET MVC 1.0,ASP.NET WebForm 3.5).
我倾向于Windows Communication Foundation,虽然我听说有关WCF在不久的将来改变方向的传闻.这些谣言有效吗?
我已经驳回了构建自定义ASP.NET MVC服务和作为旧式SOAP Web服务的想法,因为WCF将以自定义响应的能力为代价提供更灵活的传输选择.
是否还有其他.NET服务技术需要考虑?
谢谢各位的意见.很高兴听到我对WCF的倾向仍然是正确的选择,它将会持续一段时间.
java ×5
c# ×2
ieee-754 ×2
.net ×1
.net-4.0 ×1
antialiasing ×1
asp.net ×1
aspnet-merge ×1
assemblies ×1
clr ×1
dithering ×1
eclipse ×1
future ×1
ienumerable ×1
ienumerator ×1
ilmerge ×1
javascript ×1
jax-rs ×1
math ×1
sax ×1
security ×1
service ×1
sql ×1
sql-server ×1
tomcat ×1
utf-8 ×1
wcf ×1
wpf ×1
xmlreader ×1