这个错误
尝试加载应用程序时发生以下错误. - 找不到包含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)
这没有解决问题.有什么建议?
我正在使用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答案的启发,我做了另一个测试.我创建了一个新的类库项目.
添加文件引用.的初始值特定版本的属性面板是假.该csproj文件看起来像
<Reference Include="Name">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)更改特定版本的属性窗格真.VS在Include属性中添加版本.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)更改特定版本的属性窗格中假一次.VS添加了一个子元素SpecificVersion.
<Reference Include="Name, Version=...">
<HintPath>...</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
Run Code Online (Sandbox Code Playgroud)所以似乎规则是:
SpecificVersion子元素,该文件组件被配置为特定版本SpecificVersion子元素只与价值附加假.有一点我还是不明白:
缓存从反射获得的昂贵数据的最佳方法是什么?例如,大多数快速序列化程序都会缓存此类信息,因此无需在每次遇到相同类型时进行反映.他们甚至可以生成一个动态方法,从类型中查找.
传统上我使用了普通的静态字典.例如:
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引入了用于动态类型生成的可收集组件.如果我曾经使用过可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) 当我使用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
在我的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!但是哪里?
试着按照这里的线索: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)
......我看到潘普洛纳(不是饮料)的红牛在我身上肆虐:

我从这里添加了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
当我在Visual Studio中的项目中打开其中一个引用的dll的属性窗口时,我看到了一个Version和一个运行时版本.
实际上是我正在检查的Rhino.Mocks库.我明白了
有什么不同?(这是否意味着我无法使用3.6.0.0的Rhino Mocks?)
我有一个DLL集合(比如20).如何找出一个特定DLL(比如DLL A)所依赖的所有DLL?
正如标题所说,为什么ASP.NET MVC 4项目有很多NuGet包呢?现在整个框架分成了包吗?哪些对于一个空网站,没有API等空项目真的很重要?
UPDATE
为了澄清,我没有问题,除非你将基本的混淆视为一个.我只想知道为什么新的MVC 4项目默认安装了这么多软件包?一个空项目有一整页的包.互联网项目有三整页的包.
我只是好奇为什么这是因为我目前的MVC 3项目使用最多五个包.
我目前正在使用内置的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)
如何获取父方法和类名?
项目A引用项目B,项目B引用外部DDL(使用NuGet恢复).DLL应该被复制到 Project A的bin文件夹(以及 Project B的DLL):

在我的例子中,当运行项目A时,我得到以下异常抛出:
无法加载文件或程序集'PostSharp,Version = 3.2.18.0,Culture = neutral,PublicKeyToken = b13fd38b8f9c99d7'或其依赖项之一.该系统找不到指定的文件.
DLL未被复制到项目A的bin中.来自Project B的所有其他外部引用都被正确复制,这对我来说很困惑.
Copy Local对于所涉及的所有引用,都设置为true.例:

我该怎么做呢?
注意:使用Visual Studio 2013.
.net-assembly ×10
c# ×6
.net ×4
asp.net-mvc ×1
assemblies ×1
csproj ×1
logging ×1
nuget ×1
nunit ×1
owin ×1
reference ×1
reflection ×1
resharper ×1
rhino-mocks ×1
runtime ×1
solution ×1
system.net ×1
unit-testing ×1
version ×1
web-config ×1