标签: .net-assembly

找不到包含OwinStartupAttribute错误的程序集

这个错误

尝试加载应用程序时发生以下错误. - 找不到包含OwinStartupAttribute的程序集. - 找不到给定的类型或方法'false'.尝试指定程序集.要禁用OWIN启动发现,请在web.config中添加值为"false"的appSetting owin:AutomaticAppStartup.要指定OWIN启动程序集,类或方法,请在web.config中添加appSetting owin:AppStartup以及完全限定的启动类或配置方法名称.

出现在我的屏幕上,在历史上创建的最丑陋的丑陋错误页面上.

在此输入图像描述

我试图通过在配置中插入owin:AutomaticAppStartup来遵循页面上的说明.

 <appSettings >
    <add key="owin:AppStartup" value="false"></add>
        </appSettings>
Run Code Online (Sandbox Code Playgroud)

这没有解决问题.有什么建议?

c# web-config .net-assembly owin

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

了解csproj程序集引用

我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目.窥视csproj文件,我发现有时文件引用显示为

<Reference Include="name">
Run Code Online (Sandbox Code Playgroud)

但有时它看起来像

<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">
Run Code Online (Sandbox Code Playgroud)

什么可能导致差异?


受到k3b答案的启发,我做了另一个测试.我创建了一个新的类库项目.

  1. 添加文件引用.的初始值特定版本属性面板是.该csproj文件看起来像

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改特定版本属性窗格.VS在Include属性中添加版本.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改特定版本属性窗格中一次.VS添加了一个子元素SpecificVersion.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)

所以似乎规则是:

  • 版本存在于包括属性,并且没有SpecificVersion子元素,该文件组件被配置为特定版本
  • SpecificVersion子元素只与价值附加.

有一点我还是不明白:

  • 对于我的新测试项目,如果我删除文件引用并再次添加它,它将返回到第1点的格式,这是默认值.
  • 对于我现有的项目,如果我删除文件引用并再次添加它,我会在第3点找回格式.虽然这也意味着没有使用特定版本,但我想知道为什么它不会回到第1点的格式.

c# reference csproj visual-studio-2010 .net-assembly

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

缓存反射数据

缓存从反射获得的昂贵数据的最佳方法是什么?例如,大多数快速序列化程序都会缓存此类信息,因此无需在每次遇到相同类型时进行反映.他们甚至可以生成一个动态方法,从类型中查找.

之前.net 4

传统上我使用了普通的静态字典.例如:

private static ConcurrentDictionary<Type, Action<object>> cache;

public static DoSomething(object o)
{
    Action<object> action;
    if(cache.TryGetValue(o.GetType(), out action)) //Simple lookup, fast!
    {
        action(o);
    }
    else
    {
        // Do reflection to get the action
        // slow
    }
} 
Run Code Online (Sandbox Code Playgroud)

这会泄漏一点内存,但是因为它只对每种类型和类型执行一次,只要AppDomain我不认为这是一个问题.

自.net 4

但是现在.net 4引入了用于动态类型生成的可收集组件.如果我曾经使用过可DoSomething收集组件中声明的对象,那么组件将不会被卸载.哎哟.

那么在.net 4中缓存每种类型信息的最佳方法是什么?没有遇到这个问题?我能想到的最简单的解决方案是:

private static ConcurrentDictionary<WeakReference, TCachedData> cache.
Run Code Online (Sandbox Code Playgroud)

IEqualityComparer<T>我必须使用它会表现得非常奇怪,也可能违反合同.我不确定查找的速度有多快.

另一个想法是使用到期超时.可能是最简单的解决方案,但感觉有点不雅.


在类型作为通用参数提供的情况下,我可以使用嵌套的泛型类,它不应该遇到这个问题.但是如果在变量中提供类型,则它不起作用.

class MyReflection
{
    internal Cache<T>
    {
        internal static TData data;
    }

    void DoSomething<T>()
    {
        DoSomethingWithData(Cache<T>.data);
        //Obviously simplified, should have …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection .net-assembly

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

Resharper从不同的位置运行UnitTest

当我使用Visual Studio运行单元测试时,它工作正常,因为它从所有程序集所在的项目目录运行.但是当我用resharper运行它时会出错

var services = Assembly.Load("SomeAssembly");
Run Code Online (Sandbox Code Playgroud)

有错误

无法加载文件或程序集"SomeAssembly"或其依赖项之一.该系统找不到指定的文件..

所以我试过了

var path = Assembly.GetExecutingAssembly().Location;
Run Code Online (Sandbox Code Playgroud)

而且它不是第一个项目.它的

C:\用户\*用户名*\应用程序数据\本地的\ Temp\TestResults\... \输出\

而且没有'SomeAssembly'.如何正确配置resharper或收集Visual Studio所有的程序集?

它发生在单元测试中但不适用于NUnit,任何想法?

resharper nunit unit-testing .net-assembly visual-studio-2012

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

从哪里引用缺少的程序集(System.Net.Http.Formatting)?

在我的Visual Studio 2013 RC项目中,我得到了这个错误信息:

" 类型'System.Net.Http.Formatting.MediaTypeFormatter'是在未引用的程序集中定义的.您必须添加对程序集'System.Net.Http.Formatting,Version = 4.0.0.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35' "

...在"var response = "Controller中的代码行上:

public HttpResponseMessage PostDelivery(Delivery delivery)
{
    delivery = repository.Add(delivery);
    var response = Request.CreateResponse<Delivery>(HttpStatusCode.Created, delivery);

    string uri = Url.Link("DefaultApi", new { id = delivery.Id });
    response.Headers.Location = new Uri(uri);
    return response;
}
Run Code Online (Sandbox Code Playgroud)

在我的硬盘中搜索所需的程序集("System.Net.Http.Formatting"),它向我显示了它存在的几个位置,但它们都在现有项目中,如下所示:

在此输入图像描述

当然还有另一个位置,可以从中引用System.Net.Http.Formatting.dll!但是哪里?

UPDATE

试着按照这里的线索:http://www.nuget.org/packages/System.Net.Http.Formatting

IOW,选择工具>库包管理器>包管理器控制台,然后输入:

Install-Package System.Net.Http.Formatting -Version 4.0.20710
Run Code Online (Sandbox Code Playgroud)

......我看到潘普洛纳(不是饮料)的红牛在我身上肆虐:

在此输入图像描述

更新2

我从这里添加了System.Net.Http.Formatting.dll:

C:\Users\clay\My Documents\Visual Studio 2013\Projects\MvcApplication1\MvcApplication1\bin
Run Code Online (Sandbox Code Playgroud)

......它现在编译并运行并按预期工作,但这显然是"不是首选的方法"

system.net .net-assembly visual-studio-debugging mediatypeformatter visual-studio-2013

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

.Net中的版本和"运行时版本"有什么区别?

当我在Visual Studio中的项目中打开其中一个引用的dll的属性窗口时,我看到了一个Version和一个运行时版本.

实际上是我正在检查的Rhino.Mocks库.我明白了

  • 运行时版本:v2.0.50727
  • 版本:3.6.0.0

有什么不同?(这是否意味着我无法使用3.6.0.0的Rhino Mocks?)

.net rhino-mocks runtime version .net-assembly

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

找出所有DLL的依赖关系?

我有一个DLL集合(比如20).如何找出一个特定DLL(比如DLL A)所依赖的所有DLL?

c# assemblies .net-assembly

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

为什么ASP.NET MVC 4有这么多NuGet包,哪些真的很重要?

正如标题所说,为什么ASP.NET MVC 4项目有很多NuGet包呢?现在整个框架分成了包吗?哪些对于一个空网站,没有API等空项目真的很重要?

UPDATE

为了澄清,我没有问题,除非你将基本的混淆视为一个.我只想知道为什么新的MVC 4项目默认安装了这么多软件包?一个空项目有一整页的包.互联网项目有三整页的包.

我只是好奇为什么这是因为我目前的MVC 3项目使用最多五个包.

asp.net-mvc .net-assembly nuget asp.net-mvc-4

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

如何确定调用方法和类名?

我目前正在使用内置的TraceListener开发应用程序日志库.这个库将在许多项目中使用,并且应该提供一个简单的界面,我只需要关心将什么内容写入日志文件,而不是如何.

通过使用反射命名空间,我可以找出当前称为日志函数的应用程序(检索执行程序集名称),但我还想要调用日志记录函数的函数和类的名称.

比方说我有:

public static void LogInfo(string vLogText) {
   Trace.WriteLine(
        MethodInfo.GetCurrentMethod().Name
        + this.GetType().ToString() + vLogText);
   }
Run Code Online (Sandbox Code Playgroud)

当我从另一个项目调用时(类:TestClass,方法:TestMethod)

Tracer.LogInfo("log this!")
Run Code Online (Sandbox Code Playgroud)

我希望在日志中看到:

TestClass, TestMethod, log this!
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了

TracerClass, LogInfo, log this!
Run Code Online (Sandbox Code Playgroud)

如何获取父方法和类名?

.net c# reflection logging .net-assembly

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

DLL引用没有复制到项目bin中

项目A引用项目B,项目B引用外部DDL(使用NuGet恢复).DLL应该被复制到 Project A的bin文件夹(以及 Project B的DLL):

DLL引用复制到Bin

在我的例子中,当运行项目A时,我得到以下异常抛出:

无法加载文件或程序集'PostSharp,Version = 3.2.18.0,Culture = neutral,PublicKeyToken = b13fd38b8f9c99d7'或其依赖项之一.该系统找不到指定的文件.

DLL未被复制到项目A的bin中.来自Project B的所有其他外部引用都被正确复制,这对我来说很困惑.

Copy Local对于所涉及的所有引用,都设置为true.例:

复制本地参考

我该怎么做呢?

注意:使用Visual Studio 2013.

.net c# solution .net-assembly visual-studio

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