小编Blu*_*eft的帖子

无法加载文件或程序集...尝试加载格式不正确的程序(System.BadImageFormatException)

我有两个项目,ProjectAProjectB. ProjectB是一个控制台应用程序,依赖于ProjectA.昨天,一切都运转良好,但今天突然我跑了,ProjectB我得到了这个:

BadImageFormatException未处理:
无法加载文件或程序集"ProjectA,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.尝试加载格式不正确的程序.

两者都只是常规项目,不依赖于任何其他非.Net项目.两者都是.Net - 没有本机代码,也没有P/Invoke.我有其他项目依赖ProjectA并仍然工作得很好.

我尝试过的事情:

  • 确保两个项目都设置为"任何CPU",并选中" 构建"复选框.他们是.
  • 确保两个项目都针对相同的目标框架(.Net 4.0 Client Profile).
  • 在ProjectB - >引用 - > ProjectA - >属性下,确保"复制本地"设置为"True" _ (我验证正在正确复制ProjectA.dll)
  • 清理/重建解决方案.我甚至尝试手动删除两个项目中的/ bin和/ obj文件夹.
  • 重新启动Visual Studio.重启我的电脑.
  • 查看存储库的全新副本.

但我仍然得到同样的错误.我不知道我做了什么导致这个,也不知道如何解决它.有任何想法吗?

c# exception console-application badimageformatexception

376
推荐指数
10
解决办法
43万
查看次数

浮点数学在C#中是否一致?是真的吗?

不,这不是另一个"为什么是(1/3.0)*3!= 1"的问题.

我最近一直在读关于漂浮点的事情; 具体而言,相同的计算如何在不同的体系结构或优化设置上给出不同的结果.

对于存储重放的视频游戏来说,这是一个问题,或者是对等网络(而不是服务器 - 客户端),它依赖于每次运行程序时产生完全相同结果的所有客户端 - 一个小的差异浮点计算可能导致不同机器(甚至是同一台机器上)的游戏状态截然不同!

甚至在"跟随" IEEE-754的处理器中也会发生这种情况,这主要是因为某些处理器(即x86)使用双倍扩展精度.也就是说,它们使用80位寄存器进行所有计算,然后截断为64位或32位,导致与使用64位或32位进行计算的机器不同的舍​​入结果.

我在网上看到过这个问题的几种解决方案,但都是针对C++,而不是C#:

  • double使用_controlfp_s(Windows),_FPU_SETCW(Linux?)或fpsetprec(BSD)禁用双扩展精度模式(以便所有计算使用IEEE-754 64位).
  • 始终使用相同的优化设置运行相同的编译器,并要求所有用户具有相同的CPU架构(无跨平台播放).因为我的"编译器"实际上是JIT,它可能在每次运行程序时都有不同的优化,我认为这是不可能的.
  • 使用定点算术,避免floatdouble完全.decimal可以用于此目的,但会慢得多,并且没有任何System.Math库函数支持它.

那么,这在C#中是否也是一个问题? 如果我只打算支持Windows(而不是Mono)怎么办?

如果是,有没有办法强制我的程序以正常的双精度运行?

如果没有,是否有任何库可以帮助保持浮点计算的一致性?

.net c# floating-point precision ieee-754

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

根据布尔值列表过滤列表

我有一个值列表,我需要根据布尔值列表中的值进行过滤:

list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Run Code Online (Sandbox Code Playgroud)

我使用以下行生成一个新的筛选列表:

filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
Run Code Online (Sandbox Code Playgroud)

这导致:

print filtered_list
[1,4]
Run Code Online (Sandbox Code Playgroud)

线路工作,但看起来(对我来说)有点矫枉过正,我想知道是否有更简单的方法来达到同样的目的.


建议

以下答案中给出的两个好建议的摘要:

1-不要filter像我一样命名列表,因为它是一个内置函数.

2-不要True像我一样比较事情,if filter[idx]==True..因为这是不必要的.只是使用if filter[idx]就足够了.

python numpy list

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

TSQL - 如何在BEGIN .. END块中使用GO?

我正在生成一个脚本,用于自动将更改从多个开发数据库迁移到暂存/生产.基本上,它需要一堆更改脚本,并将它们合并到一个脚本中,将每个脚本包装在一个IF whatever BEGIN ... END语句中.

但是,某些脚本需要一个GO语句,以便例如SQL解析器在创建新列后知道它.

ALTER TABLE dbo.EMPLOYEE 
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column:  EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Run Code Online (Sandbox Code Playgroud)

但是,一旦我将其包装在一个IF块中:

IF whatever
BEGIN
    ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
    GO
    UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Run Code Online (Sandbox Code Playgroud)

它失败了,因为我发送了一个BEGIN没有匹配的END.但是,如果我删除GO它,它会再次抱怨一个未知的列.

有没有办法在单个IF块中创建和更新同一列?

sql t-sql sql-server sql-server-2008

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

生成塔防迷宫(有限墙壁的最长迷宫) - 近乎最佳的启发式?

在塔防游戏中,你有一个NxM网格,有一个开始,一个完成和一些墙.

此搜索

敌人从头到尾穿过最短路径而不穿过任何墙壁(它们通常不会被限制在网格上,但为了简单起见,我们可以说它们是.在任何一种情况下,它们都不能穿过对角线"洞")

镜像2

问题(对于这个问题,至少)是将多达 K个追加墙壁最大化的敌人必须采取的路径.例如,对于K = 14

图像3

我的直觉告诉我这个问题是NP难的,如果(正如我希望的那样)我们将其概括为包括在移动到终点之前必须访问的路点,也可能没有路点.

但是,对于接近最优的解决方案,是否有任何体面的启发式方法?


[编辑]我在这里发布了一个相关的问题.

algorithm maze heuristics path-finding

49
推荐指数
3
解决办法
4131
查看次数

.Net Core,Portable,Standard,Compact,UWP和PCL之间的区别?

我听说过

  • .Net核心
  • .Net Portable
  • .Net标准
  • .Net Compact
  • 通用Windows平台
  • 便携式类库

所有这些都被解释为"完整.Net的一个子集,允许您定位多个平台".所以我的问题是

  1. 有什么不同!?
  2. 如果我想编写一个尽可能大的受众群体的库,我需要使用哪一个(或多个)

(我的具体情况:我有一个针对.Net 2.0,.Net 4.5和UWP的库.针对UWP需要创建一个新的VS项目并链接所有现有文件,这是一个巨大的痛苦.现在有人告诉我它没有不适用于PCL,从它的声音我必须再次为.Net标准!?)

.net c# portable-class-library .net-core uwp

46
推荐指数
3
解决办法
6441
查看次数

CLR无法从COM上下文转换60秒

我在以前的代码上遇到此错误.我没有改变代码.

这是完整的错误:

CLR无法从COM上下文0x3322d98过渡到COM上下文0x3322f08达60秒.拥有目标上下文/公寓的线程很可能是在非抽空等待或处理非常长时间运行的操作而不抽取Windows消息.这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积.为了避免这个问题,所有单线程单元(STA)线程都应该使用抽取等待原语(例如CoWaitForMultipleHandles)并在长时间运行操作期间定期泵送消息.

以下是导致它的代码:

var openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
openFileDialog1.DefaultExt = "mdb";
openFileDialog1.Filter = "Management Database (manage.mdb)|manage.mdb";

//Stalls indefinitely on the following line, then gives the CLR error
//one minute later.  The dialog never opens.
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

是的,我确定对话框没有在后台打开,不,我没有任何明确的COM代码或非托管编组或多线程.

我不知道为什么OpenFileDialog不会打开 - 任何想法?

.net c#

38
推荐指数
4
解决办法
6万
查看次数

malloc&placement new vs. new

过去几天我一直在研究这个问题,到目前为止,除了教条论点或对传统的诉求之外,我还没有真正找到任何令人信服的东西(即"它是C++方式!").

如果我正在创建一个对象数组,使用时有什么令人信服的理由(除了易用性):

#define MY_ARRAY_SIZE 10

//  ...

my_object * my_array=new my_object [MY_ARRAY_SIZE];

for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i]=my_object(i);
Run Code Online (Sandbox Code Playgroud)

过度

#define MEMORY_ERROR -1
#define MY_ARRAY_SIZE 10

//  ...

my_object * my_array=(my_object *)malloc(sizeof(my_object)*MY_ARRAY_SIZE);
if (my_object==NULL) throw MEMORY_ERROR;

for (int i=0;i<MY_ARRAY_SIZE;++i) new (my_array+i) my_object (i);
Run Code Online (Sandbox Code Playgroud)

据我所知,后者比前者更有效(因为你没有不必要地将内存初始化为一些非随机值/调用默认构造函数),唯一的区别就在于你清理了一个:

delete [] my_array;
Run Code Online (Sandbox Code Playgroud)

另一个你清理:

for (int i=0;i<MY_ARRAY_SIZE;++i) my_array[i].~T();

free(my_array);
Run Code Online (Sandbox Code Playgroud)

我出于一个令人信服的理由.上诉的事实,这是C++(不是C),因此mallocfree不应使用不-据我可以告诉- 引人注目的一样,因为它是教条主义.是否有一些我缺少的东西new []优于malloc

我的意思是,就我所知,你根本不能使用new []- 根本没有 - 创建一个没有默认的无参数构造函数的数组,而这个malloc方法可以这样使用.

c++ malloc placement-new new-operator

37
推荐指数
6
解决办法
5973
查看次数

查找从1到n的总位数

编写一个算法来查找F(n)设置为1的位数,对于任何给定的n值,从1到n的所有数字.

复杂性应该是 O(log n)

例如:

1: 001
2: 010
3: 011
4: 100
5: 101
6: 110
Run Code Online (Sandbox Code Playgroud)

所以

F(1) = 1,  
F(2) = F(1) + 1 = 2,
F(3) = F(2) + 2 = 4,
F(4) = F(3) + 1 = 5,
etc.
Run Code Online (Sandbox Code Playgroud)

我只能设计一种O(n)算法.

algorithm

32
推荐指数
3
解决办法
2万
查看次数

我可以给编译器/ JIT提供哪些优化提示?

我已经介绍过了,现在我正在寻找可以从我的热点中挤出一切可能的性能.

我知道[MethodImplOptions.AggressiveInlining]ProfileOptimization类.还有其他人吗?


[编辑] 我刚刚发现了[TargetedPatchingOptOut].没关系,显然不需要一个.

.net c# vb.net optimization

32
推荐指数
2
解决办法
3524
查看次数