小编AK_*_*AK_的帖子

如何在C#中创建一个简单的动态代理

我想构建一个动态代理对象来向对象添加某些功能.

基本上我想接收一个对象,用一个看起来与我原来的相同的对象包装它,并拦截所有的调用.

class Wrapper : DynamicProxy// dynamic proxy is not a reall class, but i guess something like this exists...
{
    public static T Wrap(T obj)
    {
        return (T) new Wrapper(obj);
    }

    public override object InterceptCall(MethodInfo info, object[] args)
    {
        // do stuff
    }

}
Run Code Online (Sandbox Code Playgroud)

为了澄清,我想做一些类似于WCF渠道工厂的事情......


我正在添加一个赏金,因为我需要一个很好的方法来代理类(不是接口)和处理非虚方法(就像我继承并在"new"关键字下添加了一个methond).我确信这一切都很可能,因为.Net就是这么做的.

.net c# reflection proxy aop

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

Visual Studio 2015的Git问题

我在使用TortoiseGit版本1.8.16.0(git版本2.6.2.windows.1)创建的git存储库中有一个Visual Studio解决方案

我刚刚将Visual Studio从2015更新到2015 Update 1,它停止跟踪我的文件的更改.它也不允许我做任何事情.

这是某种已知问题吗?有什么解决方案吗?


更新

(具有讽刺意味的标题......)VS将未保存的文件跟踪为"已更改",保存的文件显示为"未更改"

切换分支行为正确,如果存在未提交(实际)更改,则会导致错误


更新2

这可能在输出窗口中与错误有关:

打开存储库:

无法打开'C:/ [项目路径] .VC.opendb':进程无法访问该文件,因为它正由另一个进程使用.

无法打开'C:/ [项目路径] .VC.opendb':进程无法访问该文件,因为它正由另一个进程使用.

git tortoisegit visual-studio-2015

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

在尊重偏好的同时将人分配到建筑物?

一位朋友今天问了我一个关于转让问题的问题.我找到了一个非常简单的解决方案,但我觉得它可以变得更简单,更快捷.非常感谢您的帮助.

问题:假设我有N个人,我需要将它们分配到M个建筑物中,每个建筑物都可以容纳K个人.并非所有人都愿意相互生活,所以我有一个N*N细胞矩阵和一个标志着愿意相互生活的人的1.如果一个单元格包含1,则意味着我和J可以共存.显然,矩阵在主对角线周围是对称的.

我的解决方案如下(伪代码):

int[] Match(int[] people, int[][] pairs, int numBuildings, int buildingsSize)
{
    int[] freePeople = findFreePeople(people);
    if(freePeople) = 0 
    {
        return people;
    }

    foreach(int person in freePeople)
    {
        for(int buildingIndex=0 to numBuildings)
        {
            if( CheckIfPersonFitsInBuilding(...) )
            {
                int[] tempPeople = people.Copy();
                tempPeople[person] = buildingIndex;
                int[] result = Match(tempPeople,pairs,numBuildings,buildingsSize);
                if(result != null)
                {
                    return result;
                }
            }
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

我只是用递归来涵盖所有可能的安排.我觉得这可以大大优化,我不是在谈论启发式方法,而是一个复杂性较低的解决方案.

  1. 是否存在类似于此的正式众所周知的问题?
  2. 有更好的算法吗?

我认为这可能与稳定的婚姻问题有关,尽管我不确定.

c# algorithm optimization complexity-theory combinatorics

17
推荐指数
2
解决办法
2020
查看次数

如何从C#调用C++ API

我有一个用C++实现的非常大的系统,我需要与之交互.该系统有一个非常大的API,许多C++ DLL.这些DLL导出C++类,而不是一个漂亮的C风格API.我需要从一个新的C#项目中使用它们.

据我所知,.NET有三种与本机软件交互的方式:

  1. P/Invoke - 仅适用于C API
  2. COM对象
  3. C++/CLI

所以我理解它的方式,我有三种方法:

  1. 在C中编写包装器并使用P/Invoke调用它.这看起来太过分了.
  2. 用COM编写包装器.我不知道怎么做,除非它非常简单,我不愿意学习我认为的东西 - 一种垂死的技术.
  3. 在C++/CLI中编写包装器.这似乎是最不起作用的,尽管仍然很多.

我的问题:

  1. 首先,我想知道为什么.NET不允许我"按原样"使用C++类?我假设这是一个内存管理问题.如果是的话,我更愿意编写终结器,并实现IDisposable.据我所知,C++类只是非常奇特的结构,并且由于P/Invoke支持结构,以及将结构作为第一个参数的函数,为什么不支持类呢?

  2. 其次,假设我真的很懒,而且它很无聊,乏味,工作,使用这些DLL的最佳方法是什么?直接从C#调用它们的可能性是最好的.如果没有,那么我会喜欢自动工具来制作包装纸.此外,DLL可能会稍微改变,但仍然,id而不是强制手动重写包装器.

对于一个非常好的答案,特别是在第一部分,或一个很好的自动工具,我会奖励赏金......

谢谢

c# c++ dll pinvoke interop

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

c ++必须删除引用吗?

在以下代码中:

class x
{
private:
 someRef& m_ref;

public:
 x(someRef& someRef):m_ref(someRef)
{ 
}
Run Code Online (Sandbox Code Playgroud)

我需要做什么:

~x()
{
  delete m_ref;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,没有得到指针...

基本上我在问:我是否需要在参考成员上调用析构函数?

c++ destructor reference

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

F#交互式自动完成

在VS2010中有没有在F#interactive中获得自动完成的选项?

.net f# visual-studio-2010 visual-studio

9
推荐指数
2
解决办法
2496
查看次数

将Linq转换为XSLT

有没有办法将LINQ查询转换为XSLT?LINQ可以转换为SQL的方式相同吗?

我的意思是,如果我有一个坚实的明确定义的XML(符合一个XSD)有没有办法来编译下System.Linq.Expressions东西到XSLT对于该XML?

谢谢.

对于Dimitries请求我会尝试详细说明......基本上我在一个地方有一些数据(它基本上是块的xml可序列化数据),我需要处理它们,我需要结合并处理它们.

传入的原始数据和输出结果数据都是XML可序列化的,并且符合定义良好的XSD.

我想动态地生成处理逻辑 - 在其他地方.并允许我的用户更改和处理处理.我可以用Expression树轻松地表示它自己的处理.表达式树类似于解析树,可以捕获程序代码.这是linq to SQL的工作方式,它将表达式树转换为SQL查询.

由于所有收入数据和输出都是一个定义良好的XML,我可以使用XSLT轻松进行转换,但我不熟悉XSLT足以编写动态XSLT生成器.所以我认为我可以在C#中构建转换并将它们转换为XSLT ....再次它不是通用的C#,但可能是对定义良好的数据提供者的特定查询.

例如:

(不是真正的代码)

var schemas = XSchemaSet.Load("a","b");
var doc = XDocument.Load("File",schemas);

var result = from node in doc.Nodes
             where node.Name == "Cats" || node.Name == "Dogs"
             select (new Node(){Name = "Animal Owner", Value = node.Owner)
var newDoc = new XDocument().AddNodes(result);
newDoc.Validate(schemas);
Run Code Online (Sandbox Code Playgroud)

基本上我想要的东西就像那样...如果我使用的话,我可以在单个linq查询中写出来 IQueryable.Aggregate

c# xml linq xslt expression-trees

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

Angular 异步管道依赖于承诺

这是我的模板的片段:

<div class="explanation">
 {{ foo() | async }}
</div>
Run Code Online (Sandbox Code Playgroud)

这是函数:

  foo(): Promise<string> {
    return Promise.resolve('hello');
  }
Run Code Online (Sandbox Code Playgroud)

这只会挂起浏览器。怎么会?我缺少什么?

javascript asynchronous promise angular

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

保护部署在"恶意"环境中的系统

在我的公司,我们正在开发一个由多个服务器组成的大型系统.该系统由大约5个逻辑组件组成.数据存储在XML,MS SQL和SQLite中.它是一个.Net系统(主要是),组件使用WCF进行通信,以及一些自定义UDP.客户端主要通过自定义UDP或WEB(ASP.NET和Silverlight)访问系统.

保护通信很容易,一些SSL,以及WCF上的一些安全性,我们已经完成了.

我们面临的主要问题是系统需要部署在客户的网站上,这是我们不一定信任的客户.我们需要保护服务器上的数据,以及软件本身的逆向工程.两者对我们都至关重要.

我们还需要一个kill开关,我希望根据命令销毁数据和软件,或者如果在一段时间内无法打电话回家.

我正在考虑的方向是使用TPM,或类似的东西 - 一些硬件加密解决方案,结合我们可以在内部加密服务器上的所有软件和数据的另一项服务,以便密钥来自我们的服务器安全地在我们的网站,也许TPM的记忆窗帘.

您如何建议解决这样的问题?


更新 04/02我正在寻找实用的建议,或建议可以帮助我的产品,所以我开始赏金...

看起来我们基本上把我们的机器放在客户的网站上(出于商业和实用的原因),我们拥有那台机器,客户收到他在几小时内付款的所有东西,他可以随心所欲地处理数据.但我在那台机器上运行的算法,以及存储在那里的一些数据是我们想要保护的商业机密.理想情况下,我希望机器根本不工作,甚至不启动,如果我不说它没关系,没有我的确保机器上的所有东西都保持加密状态.内存窗帘看起来也是一种在执行时保护机器的好方法.

理想情况下,我希望所有机器上的HD和存储器一旦有人用螺丝刀靠近它们就会爆炸...... :-)但我认为这样做太过分了......


更新 10/02好在做了一些研究后,我想我们将尝试与PS3加密系统相同的方向,除了我们将引入用于解密软件和来自我们服务器的数据的密钥.这样我们可以决定我们的机器是否信任服务器请求密钥,我们只需重新安装机器即可获得一个kill开关.这可能是基于TPM或类似的东西,也许是英特尔的TXT ...我也非常感兴趣的是内存窗帘作为一个重要的安全功能......

顺便说一句,我们无法通过将我们系统的有价值的部分移到我们的网站来解决这个问题,这既是因为业务需求,也是因为它在技术上不可行 - 我们需要一个巨大的带宽....

.net security encryption obfuscation tpm

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

寻找一个API来利用.NET的GPU的强大功能

我正在寻找一个很好的API来用于在GPU上实现算法.我更喜欢相关简单和灵活的东西.我不是在寻找最核心的表演,而是我可以玩的东西.另外我真的更喜欢在Nvidia和ATI卡上都有效的东西......


好的建议,特别是基于经验的建议可能会得到奖励.


目前我们讨论的算法是图像处理,即对非常大的矩阵的相关简单操作......

对我来说,我希望能够将PLINQ表达式带到GPU上,并且还有像System.Threading.Tasks.Parallel这样的API,它可以在GPU上执行...

我们大部分时间处于初步探索阶段......

再次工作跨平台几乎是一个要求......

.net c# parallel-processing gpu gpu-programming

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