小编mck*_*mey的帖子

.NET程序集格式是否有大小限制?

我们遇到了一个我以前从未体验过的有趣问题.我们在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

6
推荐指数
1
解决办法
873
查看次数

如何最好地表示SQL Server中的有理数?

我正在使用原生作为有理数提供的数据.我有一个灵活的通用C#类,它在C#中精美地表示这些数据,并允许转换为许多其他形式.不幸的是,当我转身并希望将其存储在SQL中时,我有几个解决方案,但没有一个是非常令人满意的.

这是一个例子.我有2/3new Rational<int>(2, 3)在C#中轻松处理的原始值.我想到的用于将其存储在数据库中的选项如下:

  1. 就像一个十进制/浮点,即值= 0.66666667各种精度和精确度. 优点:这允许我查询数据,例如查找值<1. 缺点:它具有精确性的损失,当我在UI中显示这个简单的值时它很难看.

  2. 存储为两个精确的整数字段,例如,分子= 2,分母= 3各种精度和精确度. 优点:这使我能够精确地表示原始值,并在以后以最简单的形式显示它. 缺点:我现在有两个字段来表示这个值,查询现在很复杂/效率低,因为每个查询都必须执行算术,例如find numerator/denominator <1.

  3. 序列化为字符串数据,即"2/3".我将能够知道最大字符串长度并且有一个varchar可以容纳这个. 优点:我回到了一个领域,但有一个确切的代表. 缺点:查询几乎被破坏并支付序列化成本.

  4. #1和#2的组合. 优点:轻松/高效地查询值范围,在UI中具有精确值. 缺点: 三个字段(!?!)保存一个数据,必须保持多个表示同步才能打破DRY

  5. #1和#3的组合. 优点:轻松/高效地查询值范围,在UI中具有精确值. 缺点:回到两个字段来保存一个数据,必须保持多个表示同步,这会破坏DRY,并且必须支付额外的序列化成本.

有没有人有另一个开箱即用的解决方案比这些更好?还有其他我不考虑的事情吗?有没有一种相对简单的方法在SQL中做到这一点,我只是没有意识到?

sql sql-server rational-numbers

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

图像在WPF v4中调整别名,但不在v3.5下调整

我正在使用WPF作为图像大小调整管道,它在.NET v3.5下运行良好.我刚刚将项目升级到目标v4.0,现在我所有调整大小的图像都有很多别名.没有任何图像管道代码已更改.

  1. 在v3.5和v4.0之间是否更改了默认WPF设置?

  2. 如何在WPF中控制调整大小的位图图像的抖动?

我使用BitmapImage,DrawingVisual,DrawingContext,RenderTargetBitmap,BitmapEncoder,和BitmapFrame,但我没有看到相关的抖动的任何属性.GDI +有很多设置,所以我猜我错过了什么.

更新:我看到的所有解决方案似乎都假设是Window对象或XAML环境.这在没有UI的Windows服务中运行.我需要一种以编程方式影响此设置的方法.

我特意从GDI +切换到WPF,因为GDI +在长期运行的流程(如服务和Web应用程序)中存在内存泄漏.

wpf .net-4.0 antialiasing dithering

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

JAX-RS中的跨领域问题

我正在寻找JAX-RS(JSR-311)中的机制,以便我能够提炼出一些我的应用程序特有的横切关注点.例如,我的应用程序具有为每个请求查找或构建的特定上下文.我希望能够在集中的位置执行这种类型的逻辑,然后以某种方式附加到上下文,以供各种资源用于请求的其余部分.如果我只对一些URL子集执行这些类型的操作会更好.

JAX-RS为路径段,cookie,标题等提供的默认注入是很好的但是那些部分的自定义解释呢?我真的不想每次需要时都要构建它.我宁愿有办法指定它是如何构建的,然后只是将上下文组件作为资源方法的一部分注入.

有没有这样的钩子?我可以操纵提供者模型来执行此操作吗?顺便说一句,我希望尽可能长时间保持与实现无关(Jersey,RESTEasy等).

提前感谢您的任何见解.

java security jax-rs cross-cutting-concerns

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

Java XMLReader不清除多字节UTF-8编码属性

我有一个非常奇怪的情况,我的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)

有没有人知道发生了什么以及如何解决它?文档中的内容与我通过此代码段进行调试时发生的情况不符.

java sax xmlreader utf-8 character-encoding

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

Eclipse"自动构建"不级联

我在Eclipse中有一个项目(Indigo,但在Helios中类似),其中有一些文件可以在src/main/resources其中生成*.java源文件target/generated-sources/xyz.项目设置已启用"自动构建",因此无论何时编辑和保存这些资源文件,都会*.java生成相应的文件.我已经添加target/generated-sources/xyz了项目Build Paths.一切都很完美.

问题是生成的*.java文件的更改不一致地重建.如果我在编辑器中打开了其中一个文件,那么它会注意到它已更改并询问我是否要重新加载它.重新加载*.java文件足以让它识别它已更改并触发重建.如果我没有打开它,它不会自动获取更改.

关于我能做些什么来让Eclipse(最好是Indigo)知道这些生成的文件正在更新的任何想法?或者更好的是告诉它直接监控这些文件夹?

谢谢.

java eclipse eclipse-indigo

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

AmazonDynamoDBClient 的线程安全性/可重用性/生命周期?

AmazonDynamoDBClient我很好奇Java SDK 中主要 DynamoDB 入口点的线程安全性和可重用性是什么?我注意到 JavaDocs 中的以下声明DynamoDBMapper

“这个类是线程安全的,可以在线程之间共享。它也非常轻量级,所以不需要。”

由于DynamoDBMapper引用了AmazonDynamoDBClient,这是否意味着AmazonDynamoDBClient是相似的?

我还想我在某个地方看到鼓励保留和共享,AWSCredentials因为它可以更好地管理节流和会话?由于凭证是 的主要依赖项AmazonDynamoDBClient,这也可能支持它具有更长的生命周期?

java amazon-dynamodb

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

在Tomcat中使用ExecutorService / Futures?

我有一个可能长达100ms的任务,我想在开始处理请求时就开始,并在以后需要时获取结果。我不想以此数量来阻止和扩展每个请求。

在普通的Java应用程序中,我将创建一个,ExecutorServiceCallable<T>使用将其作为来运行,Future<T>以便稍后获得结果。

由于Tomcat维护自己的线程池,我是否应该尝试与之协调?换句话说,我的ExecutorService池是否与Tomcat的线程竞争?这是问题吗?以某种方式背负到Tomcat的池是否有优势?

来自具有类似经验的人的任何建议将不胜感激。另外,我现在对添加其他依赖项(例如Spring等)不感兴趣。

java tomcat future executorservice

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

用JavaScript或IEEE-754舍入怪癖?

我在我的一个单元测试中遇到了一个奇怪的问题,我在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.

javascript math ieee-754

4
推荐指数
1
解决办法
1350
查看次数

如何测试数字转换是否会改变值?

我执行某些数据类型转换,我需要代表uint,long,ulongdecimal为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# clr ieee-754

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

在接口中使用IEnumerator <T>的模式

我有一个C#类需要IEnumerable<T>在一堆方法中处理一系列items(),所以我不能简单地foreach在一个方法中.我打电话给它.GetEnumerator()并传递它IEnumerator<T>,它很有效,在循环一个序列时给了我所需的灵活性.

现在我想让其他人在这个过程中添加逻辑.最自然的方法是为它们提供一个接受方法的接口IEnumerator<T>.简单,完成,它的工作原理.

但我担心这是一种反模式.他们必须知道IEnumerator<T>已经.MoveNext()调用过,所以他们可以简单地访问.Current.另外,我没有看到IEnumerator<T>在接口中使用的任何先例.

  1. 我不考虑哪些陷阱?
  2. 是否有另一种模式允许我这种相同的有效机制(即我不希望创建/销毁多个副本)而不暴露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>通常是一个坏主意传递它.

我听过的最好的建议是创建我自己的类,它会被传递.还有其他建议吗?

c# ienumerable ienumerator design-patterns

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

当前的WCF技术替代.NET-to-.NET服务?

我正在拆分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的倾向仍然是正确的选择,它将会持续一段时间.

.net service wcf communication n-tier-architecture

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