小编Dan*_*rth的帖子

VS告诉我添加对看似无关的程序集的引用.如何找出原因?

我创建了一个新的单元测试项目来测试我的NHibernate映射.
NHibernate映射在一个也包含EF实体的项目中.
在我的单元测试中,我只使用甚至没有间接引用实体框架的类型,但是,当我编译单元测试项目时,我得到以下错误:

"System.Data.Objects.DataClasses.IEntityWithRelationships"类型在未引用的程序集中定义.您必须添加对程序集'System.Data.Entity,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

有没有办法找出,为什么需要这个参考?我已多次检查所有使用的类,但找不到任何东西......

我觉得我在这里错过了一些东西......

.net c# visual-studio-2010

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

具有非依赖性参数的构造函数注入

我有这样的界面ITradingApi:

public interface ITradingApi
{
    IOrder CreateOrder(...);
    IEnumerable<Symbol> GetAllSymbols();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这是交易软件供应商的不同API的外观.我的视图模型在其构造函数中依赖于此交易API:

public class MainViewModel
{
    public MainViewModel(ITradingApi tradingApi) { /* ... */ }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我使用Ninject作为IoC容器,因此我将创建一个我的视图模型的实例,如下所示:

var vm = kernel.Get<MainViewModel>();
Run Code Online (Sandbox Code Playgroud)

现在,我的问题:

执行ITradingApi可能需要额外的参数才能工作.
例:

  • 一个供应商API在内部使用TCP/IP,因此我需要一个主机名和一个端口.
  • 另一个供应商使用COM对象.在这里,我不需要任何信息.
  • 第三个供应商需要帐户的用户名和密码.

本着不允许不完整对象的精神,我将这些作为参数添加到具体实现的构造函数中.

现在,我不确定,这将如何运作.显然,这些附加参数不属于接口,因为它们特定于每个实现.
另一方面,这些附加参数需要由最终用户输入然后传递给实现ITradingApi,这意味着用户ITradingApi需要对具体实现有深入了解.
如何解决这个难题?

更新:
一种方法可能是创建一个ITradingApiProvider公开所需参数列表.View可以自动为这些参数创建一个输入表单,该表单将数据绑定到参数中ITradingApiProvider.现在,当ITradingApi从提供程序请求实例时,它可以使用这些参数来创建具体实现的实例.显然执行ITradingApiProvider和ITradingApi紧密耦合,但我认为只要每个实现ITradingApi都带有相应的实现,这不是问题ITradingApiProvider.

.net c# architecture dependency-injection

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

WinSxS无法加载VC++ DLL

我有几个VC++ DLL的问题,我应该将其包含在我的.NET/C#项目中.一个VC++ DLL是一个C++/CLI DLL,我将其用作.NET项目的公共接口.其他DLL是用本机C++编写的.我无法访问VC++ DLL的源代码,我只需要使用它们.

我做了一个.NET测试项目并引用了C++/CLI DLL.没问题,编译器很幸运,很棒.只有一个问题:当我启动.NET程序的EXE时,由于缺少VC++核心DLL,我得到有关C++ DLL的错误.sxstrace显示以下内容(缩写):

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
...
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".
Run Code Online (Sandbox Code Playgroud)

现在我不是傻瓜,尝试了几件事.我已经阅读了很多关于WinSxS的内容,以便更深入地了解正在发生的事情.现在,我已经到了,我正在为我服务.我想要执行程序的系统安装了当前版本8.0.50727.762(SP1)中的VC++ Redistributable软件包.我知道winsxs中有一个针对Microsoft.VC80.CRT的策略文件,它将此程序集的所有版本重定向到当前版本8.0.50727.762(这是http://blogs.msdn.com/b/nikolad上的问题的解决方案/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx).但正如上面的错误所说,此策略文件似乎不起作用或不予考虑.系统只想找到8.0.50727.6195版本的程序集.

现在这是第一个问题:这里的问题是什么?我搞清楚后,我可以解决最初的问题......

.net c++ dependencies winsxs visual-c++

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

autofac wcf注册错误

我正在尝试在Wcf上尝试使用Autofac的结构.

    namespace WcfService1.Model
    {
        [DataContract(IsReference = true)]
        public partial class Account
        {
            [DataMember]
            public int Id { get; set; }
            [DataMember]
            public string Name { get; set; }
            [DataMember]
            public string Surname { get; set; }
            [DataMember]
            public string Email { get; set; }
            [DataMember]
            public Nullable<System.DateTime> CreateDate { get; set; }
        }    
    }
Run Code Online (Sandbox Code Playgroud)

型号> IAccounRepository.cs

1.

namespace WcfService1.Model
{
  public interface IAccountRepository
    {
        IEnumerable<Account> GetAllRows();
        bool AddAccount(Account item);
    }
}
Run Code Online (Sandbox Code Playgroud)

型号> AccounRepository.cs

2.

namespace WcfService1.Model
{
    public class AccountRepository:IAccountRepository …
Run Code Online (Sandbox Code Playgroud)

wcf autofac

10
推荐指数
2
解决办法
6225
查看次数

扔; 据说不会重置堆栈跟踪,但它确实在某些情况下

可能重复:
通过重新抛出错误的堆栈跟踪

人们普遍认为,在.NET throw;中不会重置堆栈跟踪,但throw ex;确实如此.

但是,在这个简单的程序中,我得到了不同的行号:

void Main()
{
    try
    {
        try
        {
            Wrapper(); // line 13
        }
        catch(Exception e)
        {
            Console.WriteLine(e.ToString());
            throw; // line 18
        }
    }
    catch(Exception e)
    {
          Console.WriteLine(e.ToString());
    }
}

public void Wrapper()
{
    Throw(); // line 28
}

public void Throw()
{
    var x = (string)(object)1; // line 33
}
Run Code Online (Sandbox Code Playgroud)

输出是:

System.InvalidCastException:无法将类型为"System.Int32"的对象强制转换为"System.String".在C:\ long-path\Program.cs中的ConsoleApplication2.Program.Main(String [] args):第13行

System.InvalidCastException:无法将类型为"System.Int32"的对象强制转换为"System.String".在C:\ long-path\Program.cs中的ConsoleApplication2.Program.Main(String [] args):第18行

注意:第一个堆栈跟踪包含第13行,第二个包含第18行.此外,第13行和第18行都不是实际发生转换的行.

我现在的问题是:在什么情况下throw;改变堆栈跟踪以及在哪种情况下它不会改变堆栈跟踪?

请注意,这已经被观察到,但一般没有回答.


更新:
我在调试模式下运行上面的代码,它产生这个:

System.InvalidCastException:无法将类型为"System.Int32"的对象强制转换为"System.String".在ConsoleApplication2.Program.Throw()中的C:\ long-path\Program.cs:第33行位于ConsoleApplication2.Program.Wrapper()位于C:\ long-path\Program.cs:第28行位于ConsoleApplication2.Program.Main (String …

.net c#

10
推荐指数
2
解决办法
987
查看次数

如何从封闭类型的MethodInfo获取开放泛型类型的MethodInfo

假设我有一个这样的类:

public class MyClass<T>
{
    public void Foo(T t)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个实例MyClass<int>和MethodInfo它的Foo方法.调用methodInfo.GetParameters()将返回一个ParameterInfo带有一个条目的数组,引用类型int.我的问题是,我似乎无法找到,如果该参数被声明为int在类中或作为T.

我想要实现的目标是什么?
在运行时,我想阅读MethodInfoVisual Studio生成的XML Doc文件中指定的方法的文档.
对于上面定义的方法,键如下所示:

<namespace>.MyClass`1.Foo(`0)
Run Code Online (Sandbox Code Playgroud)

该`0指声明类的第一个泛型类型参数.为了能够构造这个字符串,我需要以某种方式获取此信息.
但是怎么样? MethodInfo似乎没有包含该信息......

.net c# reflection

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

包含2个数据库的SQL查询

在C#中,我想执行一个使用2个不同数据库的查询(一个是Access for local,另一个是远程的,是MySQL)

我能够在VBA Access中做到这一点,但是如何在C#中做同样的事情?

这就是我在Access中的表现:

在表格中链接我的2个不同的表/数据库

在VBA中:

sSQL = "INSERT INTO DB1tblClient SELECT * FROM DB2tblClient"  
CurrentDb.Execute sSQL  
Run Code Online (Sandbox Code Playgroud)

我如何在C#中执行此SQL?(使用什么对象等...如果可以的话,示例代码)

谢谢 !

c# mysql sql database ms-access

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

如何保存我的临时区域的当前状态?

问题:
我在我的临时区域添加了一些文件.我想暂时保存这些信息.如何?

背景:
有时我会进行更大的重构.提交完整的结果才真正有意义.
在这个重构过程中,我还做了一些我想独立提交的无关更改.
例如,重构重命名了一个方法.无关的更改修复了同一类中另一个方法的一个参数的拼写错误.
现在,假设我已经意识到我忘记事先提交了一个不相关的更改,我已经将大部分文件添加到临时区域.
将文件添加到临时区域需要时间,因为我检查每个文件以确保我真的只提交我想要的东西.因此,简单地从暂存区域中删除它们不是解决方案.
我想做的是:

  1. 保存暂存区域的当前状态
  2. 删除所有暂存的文件
  3. 分阶段进行无关的改变
  4. 承诺无关的变化
  5. 将已保存的状态重新应用于暂存区域.

这有点可能吗?

另一种解决方案是多个临时区域的可能性,但我不认为这是可能的.

git

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

Nuget套餐有什么意义?

也许我在做错事或在这里表达纯粹的无知,但我真的不知道Nuget包是如何有益的?我最近决定安装一些Nuget包来替换我的应用程序中的静态DLL.当我检查由包创建的文件夹时,它们似乎包含许多不同版本的DLL,它们都嵌套在子目录数组下.

难道不是所有这些文件(其中许多似乎是冗余的)会增加应用程序的整体大小并减慢发布和部署例程吗?还应将哪些项目放入源代码管理中?

就像我说的那样,我可能会在这里遗漏一些东西,但任何人都可以了解Nuget包的优点吗?我开始认为bin文件夹中的一个简单的DLL工作得很好吗?

.net package nuget nuget-package

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

如何从公司代理后面的github克隆

我是一个非常烦人的企业代理:

  1. 使用的实际代理地址由脚本确定
  2. 它需要身份验证
  3. 它使用HTTPS 替换网页证书

如何在此方案中成功克隆github存储库?

windows git github

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