小编Car*_*ngo的帖子

编写.Net平台的汇编代码

我是一位经验丰富的C#开发人员,为了好玩,我想要编写一些汇编代码.我想知道是否最简单的只是用字节代码编写并以某种方式使用C#编译器,链接器.我对如何解决这个问题有点不确定.

或者也许有一个像样的汇编语言有一个步调试器和其他好东西在一个环境中发送,我应该拿起来?

我主要想编写代码来进行计算并输出到控制台窗口.

c# assembly

7
推荐指数
2
解决办法
2275
查看次数

在SQL Server中查找表的B树的高度

由于数据库数据在B树中以8k页组织,并且对于PK信息信息同样如此,因此数据库中的每个表应该可以计算B树的高度.从而揭示了达到某些数据所需的跳跃次数.

由于行大小和PK大小都非常重要,因此很难计算,因为例如 varchar(250)不需要占用250个字节.

1)有没有办法从SQL Server中获取信息?2)如果没有,是否可以使用分析数据库表的一些代码进行粗略估计?

sql-server b-tree primary-key sql-server-2008 b-tree-index

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

AppDomain.CurrentDomain.GetAssemblies fails with ReflectionTypeLoadException

During unittesting I have run into a problem with the following code that asks for all the loaded assemblies:

var res = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToList();
Run Code Online (Sandbox Code Playgroud)

this code fails with a ReflectionTypeLoadException which has inner exceptions of the pattern

Could not load type Microsoft.Xml.Serialization.GeneratedAssembly.FOO

where FOO are some specific classes also coded by us.

The problem arises when running unittests prior to the above which creates XML documents using the XDocument class.

我可能不会想要加载这些代码生成的类(我猜测Microsoft.Xml.Serialization.GeneratedAssembly.*是生成的代码.)我只想了解什么是错误的.

c# reflection

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

如何在VS2013中调试期间加载dll

我有一些代码

var aa = a();
b(aa);
Run Code Online (Sandbox Code Playgroud)

在调试时,我在b()通话中设置了一个断点.然后转到即时窗口,我希望能够从我的项目中的DLL执行代码,但尚未加载.说我想要一个新的Boo电话Foo().代码Baz位于dll 的命名空间中Spongle.dll.

当我输入

>> new Baz.Boo().Foo(aa)
Run Code Online (Sandbox Code Playgroud)

我收到错误:类型或命名空间名称'Baz'在此范围内无效.

如果我更改我的代码,以便我Boo已经加载它可以正常工作.

new Boo(); // dummy to ensure loading
var aa = a();
b(aa);
Run Code Online (Sandbox Code Playgroud)

是否可以在调试期间从即时窗口加载dll,这样我可以调用我的代码,尽管它已经加载(还)?我可以使用new Boo()我的应用程序主类的静态初始化程序,但是在单元测试期间我遇到了问题,因为它不一定涉及具有该静态初始化程序的类.

c# dll dllimport visual-studio dll-injection

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

如何在测试F#时模拟出丰富的依赖项

如何使我的F#应用程序可测试?该应用程序主要使用F#函数和记录编写.

我知道如何使用外部依赖关系来测试f#中的函数, 并且我知道各种博客帖子显示当你的界面只有一个方法时这是多么容易.

函数按模块分组,类似于我在C#类中对方法进行分组的方式.

我的问题是如何在运行测试时替换某些"抽象".我需要这样做,因为这些抽象读/写DB,通过网络与服务交谈等.这种抽象的一个例子是下面的存储和提取人和公司的存储库(及其评级).

如何在测试中替换此代码?函数调用是硬编码的,类似于C#中的静态方法调用.

我有一些可能性,但不确定我的想法是否太过我的C#背景.

  1. 我可以将我的模块实现为接口和类.虽然这仍然是F#,但我觉得这是一种错误的方法,因为我失去了很多好处.这也在http://fsharpforfunandprofit.com/posts/overview-of-types-in-fsharp/中论证.

  2. 调用例如的代码.我们PersonRepo可以作为参数函数指针指向函数的所有函数PersonRepo.然而,这很快就会积累到20个或更多指针.任何人都难以概述.它也使得代码库变得脆弱,对于每个新函数来说,PersonRepo我需要将函数指针"一直向上"添加到根组件中.

  3. 我可以创建一个包含我的所有函数的记录PersonRepo(以及我需要模拟的每个抽象的一个).但我不确定如果我再要创建例如用于使用记录一个明确的类型lookupPerson(Id;Status;Timestamp).

  4. 还有其他方法吗?我更喜欢保持应用程序的功能.

一个带有副作用的示例模块我需要在测试期间模拟出来:

namespace PeanutCorp.Repositories
module PersonRepo =
    let findPerson ssn =
        use db = DbSchema.GetDataContext(ConnectionString)
        query {
            for ratingId in db.Rating do
            where (Identifier.Identifier = ssn)
            select (Some { Id = Identifier.Id; Status = Local; Timestamp = Identifier.LastChecked; })
            headOrDefault
        }

    let savePerson id ssn timestamp status rating =
        use db = DbSchema.GetDataContext(ConnectionString)
        let entry …
Run Code Online (Sandbox Code Playgroud)

f# unit-testing functional-programming

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

部分评估和柯里化

我已经开始理解一些与柯里化相关的例子,但我仍然对柯里化的概念不满意。我知道 currying 可用于进行部分评估,但我不确定在某些情况下它会如何工作。

我知道它在下面的例子中是如何工作的:

fun funkyPlus x y = x*x+y;
Run Code Online (Sandbox Code Playgroud)

所以假设我们只为 x 传递一个参数,那么它等价于以下内容:

fun funkyPlus 3 = (fn x => fn y => x*x+y)3
Run Code Online (Sandbox Code Playgroud)

最终返回

fn y => 9+y
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试将这个想法应用到内置函数中foldl

我知道它的代码是:

fun foldl f b [] = b
   |foldl f b (h::t) = foldl f f(h,b) t.
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我们不将所有参数传递给foldl(即我们只传递第一个参数,即函数('a*'b->'b))怎么办。在我给出的第一个例子中,当只有一个参数传递给函数时,很容易看出函数是如何工作的。但是,foldl当只有一个参数传递给它时,我无法看到如何工作。

帮助。

recursion programming-languages functional-programming sml currying

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

实体框架自动生成的表名

使用实体框架通常会编写诸如的查询

var orders = from o in context.Orders.Include("Customer")
             where o.OrderDate.HasValue && o.OrderDate.Value.Year == 1997
             orderby o.Freight
             select o;
Run Code Online (Sandbox Code Playgroud)

真正让我的胃流失的是"Customer"字符串论证.我很难相信EF不会在某处生成表名作为常量.有没有人知道比使用字符串更好的方法?对于Include获取选项?

c# entity-framework

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

将枚举值作为参数的通用 C# 方法

可能的重复:
创建将 T 限制为枚举的通用方法

给定一个仅对枚举值进行操作的通用方法

static void <T> method(T enum) where T ?????
{
     // do something with enum...
}
Run Code Online (Sandbox Code Playgroud)

如何限制T只接受枚举值?我试过使用struct但是这不允许使用可以为空的枚举类型调用我的方法。

c# generics type-constraints

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

ANTLR 解析多个文件以生成一个 AST

我如何解析多个源文件并最终只有一个 AST 来执行分析和代码生成?通常,我以以下形式找到 ANTLR 的示例用法

public void process(String source) 
{
    ANTLRStringStream Input = new ANTLRStringStream(input);
    TLexer lex = new TLexer(Input);
    CommonTokenStream tokens = new CommonTokenStream(lex);
    TParser parser = new TParser(tokens);
    var tree = parser.parse().Tree; 
} 
Run Code Online (Sandbox Code Playgroud)

但是词法分析器和解析器似乎都无法获取额外的文件。我应该创建一个词法分析器和解析器 pr。inputfile 并使用 tree.Add() 将其他文件中的树添加到第一个文件的树中?

antlr

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

SSIS事务管理MSSQL

如果复制失败,我需要将数据从DB"source"复制到db"destination",我需要回滚"destination".这两个连接在连接管理器中定义为OLE DB.

这是我目前无法正常工作的尝试.我尝试使用内置的事务管理(将任务事务设置为必需),但这只是无法连接到"目标".

目的地已将"RetainSameConnection"设置为true,而对于"source",这是没有特殊原因的.

我还设置了"MaxConcurrentExecutables"= 1来阻止SSIS执行我的回滚作为第一件事.

序列中的每个任务都设置为"隔离级别"= ReadUncommitted和"transactionOption"=支持.

"失败的脚本"是一个总是失败的脚本,以便我测试事务是否正常.

在此输入图像描述

任务"begin tran"的代码是"BEGIN TRANSACTION",连接设置为"destination"

任务"rollback tran"的代码是"rollback transaction",连接设置为"destination"

回滚失败,"回滚事务请求没有相应的'BEGIN TRANSACTION'"

sql-server ssis transactions

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