更新: 可以在Microsoft Connect中找到重现此错误的示例项目.我还测试并验证了下面接受的答案中给出的解决方案适用于该示例项目.如果此解决方案不适合您,您可能遇到了另一个问题(属于另一个问题).
这是一个之前提出的问题,无论是Stack Overflow还是其他地方,但我发现的这些建议都没有帮助我,所以我只想尝试一个新问题.
场景:我有一个简单的Windows窗体应用程序(C#,.NET 4.0,Visual Studio 2010).它有大多数其他形式继承的基本形式,它使用Entity Framework(和POCO类)进行数据库访问.没什么好看的,没有多线程或任何东西.
问题:一切都很好.然后,当我即将启动应用程序时,Visual Studio无法构建.我收到警告"无法删除文件'... bin\Debug\[ProjectName] .exe'.访问路径'... bin\Debug\[ProjectName] .exe'被拒绝." 和错误"无法将文件'obj\x86\Debug\[ProjectName] .exe'复制到'bin\Debug\[ProjectName] .exe'.进程无法访问文件'bin\Debug\[ProjectName] .exe "因为它被另一个进程使用了." (我在运行Rebuild时得到警告和错误,但只运行Build时出错 - 不认为这是相关的吗?)
我完全理解警告和错误消息的内容:Visual Studio显然试图覆盖exe文件,同时由于某种原因它同时锁定它.但是,这并没有帮助我找到问题的解决方案......我发现唯一有效的方法是关闭Visual Studio并重新启动它.然后构建和启动工作,直到我在某些表单中进行更改,然后我再次遇到相同的问题并且必须重新启动...非常令人沮丧!
正如我上面提到的,这似乎是一个已知的问题,所以有很多建议的解决方案.我将列出我在这里尝试过的内容,以便人们知道要跳过的内容:
将以下内容添加到项目的预构建事件中:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)将以下内容添加到项目属性(.csproj文件):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Run Code Online (Sandbox Code Playgroud)但是,他们都没有为我工作,所以你可能会明白为什么我开始有点沮丧.我不知道在哪里可以看,所以我希望有人能给我一些东西!这是VS中的一个错误,如果是这样的补丁?或者我做错了什么,我有一个循环引用或类似的,如果是这样我怎么能找到?
任何建议都非常感谢:)
更新:如在下面评论中提及,我也使用Process Explorer的,它实际上检查是 Visual Studio中被锁定的文件.
上下文:
我们的一些用户在我们的Web应用程序中报告了文件上载功能的问题.它只是偶尔发生,没有任何特殊模式.我们一直试图弄清楚它,在我们认为可能有用的任何地方添加调试信息,爬行日志等,但我们无法重现或弄清楚它.
问题:
我现在正试图通过使用MSTest和WatiN来重现这个应该重复失败很多次(几百次)的操作.只是想知道测试循环中有多远,我想打印如下:
Console.WriteLine(String.Format("Uploaded file, attempt {0} of {1}", i, maxUploads));
Run Code Online (Sandbox Code Playgroud)
但是,这不会出现在"输出"窗口中.现在我知道您将在测试结果中获得控制台输出(以及您从其中输出的内容Debug.Writeline),但是在测试完成之后才能使用.由于我的测试有数百次重复可能需要一段时间,所以我想知道它已经走了多远.
问题:在测试执行期间,
我是否可以在"输出"窗口中获取控制台输出?
我正在开发一个应用程序(winforms C#.NET 4.0),我通过简单的HTTP请求从第三方访问查找功能.我用一个参数调用一个url,作为回报,我得到一个带有查找结果的小字符串.很简单.
然而,挑战是,我必须做很多这些查找(成千上万),我想限制所需的时间.因此,我想并行运行请求(例如10-20).我使用ThreadPool来做到这一点,我的代码的简短版本如下所示:
public void startAsyncLookup(Action<LookupResult> returnLookupResult)
{
this.returnLookupResult = returnLookupResult;
foreach (string number in numbersToLookup)
{
ThreadPool.QueueUserWorkItem(lookupNumber, number);
}
}
public void lookupNumber(Object threadContext)
{
string numberToLookup = (string)threadContext;
string url = @"http://some.url.com/?number=" + numberToLookup;
WebClient webClient = new WebClient();
Stream responseData = webClient.OpenRead(url);
LookupResult lookupResult = parseLookupResult(responseData);
returnLookupResult(lookupResult);
}
Run Code Online (Sandbox Code Playgroud)
我从另一个地方填写numbersToLookup(a List<String>),打电话startAsyncLookup并提供回叫功能returnLookupResult以返回每个结果.这有效,但我发现我没有得到我想要的吞吐量.
最初我认为它可能是第三方的系统结构很差,但我通过尝试同时从两台不同的机器运行相同的代码来排除这种情况.两个人中的每一个都花了一个人,所以我可以排除那一个.
然后一位同事告诉我,这可能是Windows的限制.我google了一下,发现这篇帖子说默认情况下,Windows将同一个Web服务器的同时请求数量限制为HTTP 1.0为4,HTTP 1.1为2(对于HTTP 1.1,这实际上是根据规范( RFC2068)).
上面提到的同一篇文章也提供了增加这些限制的方法.通过向[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings](MaxConnectionsPerServer和MaxConnectionsPer1_0Server)添加两个注册表值,我可以自己控制它.
所以,我尝试了这个(坐到20),重新启动我的电脑,并试图再次运行我的程序.可悲的是,它似乎没有任何帮助.我在运行批量查找时也一直关注资源监视器(参见屏幕截图),我注意到我的应用程序(标题为黑屏的应用程序)仍然只使用了两个TCP连接.
所以,问题是,为什么这不起作用?我使用错误的注册表值链接的帖子是?这可能不再可能在Windows中"破解"(我在Windows 7上)? …
我有一个示例课程
public class MyClass{
ActionResult Method1(){
....
}
[Authorize]
ActionResult Method2(){
....
}
[Authorize]
ActionResult Method3(int value){
....
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想要的是编写一个返回true/false的函数,可以像这样执行
var controller = new MyClass();
Assert.IsFalse(MethodHasAuthorizeAttribute(controller.Method1));
Assert.IsTrue(MethodHasAuthorizeAttribute(controller.Method2));
Assert.IsTrue(MethodHasAuthorizeAttribute(controller.Method3));
Run Code Online (Sandbox Code Playgroud)
我到了那个地步
public bool MethodHasAuthorizeAttribute(Func<int, ActionResult> function)
{
return function.Method.GetCustomAttributes(typeof(AuthorizeAttribute), false).Length > 0;
}
Run Code Online (Sandbox Code Playgroud)
适用于Method3.现在我怎么能以一种将字符串和类作为参数的方式来做那个泛型呢?
我们最近开始使用Azure来托管一些虚拟机,但是我在获取可用资源监控指标时遇到了问题.
当我转到虚拟机的仪表板时,我可以选择添加多个指标,但缺少可用内存:

在阅读有关如何监控云服务的内容时,您应该可以选择为"可用内存"添加指标.在Stack Overflow上阅读其他帖子,我看到其他工具,如MetricsHub提到 - 但我不认为这是我们想要的,因为我们不需要任何监控端点,我们只想看看Azure仪表板中的内存使用情况(我们无法使用Azure商店中的应用程序,因为我们使用的是企业协议).
我错过了一些明显的东西吗?将内存监控添加到仪表板必须做什么?
我正在开发一个Android应用程序,在其中我从Web服务下载JSON数据.解析数据的类看起来像这样:
public class JsonCourseParser implements CourseParser {
public Course parseCourse(String courseData) {
Course result;
try {
JSONObject jsonObject = new JSONObject(courseData);
...
result = new Course("foo", "bar");
} catch (JSONException e) {
result = null;
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
这构建得很好,当我parseCourse()从我的应用程序内部调用时它可以正常工作,但是当我尝试在单元测试中测试此方法时,我得到了以下异常:
java.lang.NoClassDefFoundError: org/json/JSONException
at JsonCourseParserTest.initClass(JsonCourseParserTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: …Run Code Online (Sandbox Code Playgroud) 我见过Mercurial的示例忽略了Visual Studio的文件等等.
我刚刚开始玩Android开发,我也利用这段时间来试验Mercurial.所以我的问题是:有没有人有一个.hgignore用于Eclipse和Android开发的文件的好例子?
首先,我自己有以下内容:
# use glob syntax
syntax: glob
# Ignore patterns
.metadata\
bin\
gen\
Run Code Online (Sandbox Code Playgroud)
是否还有其他应包含的忽略模式?应该是Eclipse文件.classpath,也.project可以从版本控制中省略?
- 编辑如下 -
我还没有得到我希望的答案,所以我会拿出一笔赏金,并试着说清楚我正在寻找什么.
经过自己的实验,我似乎发现.hgignore上面列出的建议似乎已经足够了.我做过的唯一补充就是一行.settings(这是我运行Android工具后出现的文件夹- >修复项目属性).我还发现,(由Ry4an提到的),因为Eclipse文件.classpath和.project应该不被排除在外.
然而,当我得到比基本教程更大的项目时,我不确定这个小的忽略文件是否足够(如果它实际上是好的,请解释原因,并且你会得到信用).总结一下我在寻找的东西:
.hgignoreEclipse下Android项目文件的具体示例我目前正在使用Visual Studio 2010,但我不认为这是特定于版本的问题(认为它在2008年也是完全相同的).
当我想在我的解决方案中找到一些变量/函数/无论使用什么时,我右键单击它并选择"查找所有引用".这为我在所有现有引用的查找符号结果视图中提供了一个长列表.然而,这个清单非常混乱.结果似乎按照它们所在的文件排序,但它停在那里.它们既没有按行号排序,也没有任何其他符合逻辑的东西(至少我可以看到......).
如果我在Eclipse中执行相同类型的操作,我会得到一个很好的列表,其中搜索结果按文件排序,然后是文件中的函数和行号.有没有办法在Visual Studio中实现相同的功能(某些偏好可能指定)?或者这只是Visual Studio完全无望的那些愚蠢的事情之一?或者,我是否只缺少一些出色的排序逻辑?
这不是一个非常大的问题,但是当你查看变量的引用时,如果它是某种逻辑顺序,它会使它变得容易得多......
更新:
只是为了澄清:我知道还有其他附加组件和工具,如ReSharper等,它们比Visual Studio做得更好.我很感兴趣是否可以从Visual Studio现有的"查找所有引用"中"清理"搜索输出.如果不是 - 它们当前的排序顺序背后的逻辑是什么(必须有一些逻辑,因为每当我搜索相同的变量时,我似乎在结果中得到相同的顺序).
<TLDR>
它是在所有可能的使用MS的网络部署到部署Web应用程序的远程主机从命令行与非管理员用户?
</ TLDR>
我已经遵循了Microsoft的安装和配置Web部署指南中的每一点.我的目标是能够与IIS用户/非管理员用户进行远程Web部署.
完成为非管理员部署安装和配置Web部署中所述的所有步骤后,我收到以下日志消息(表示一切正常):
Publish enabled for 'deploy_user'
Granted 'deploy_user' full control on 'C:\inetpub\wwwroot'
Successfully created settings file 'C:\Users\...\Desktop\deploy_user_Default Web Site.PublishSettings'
Run Code Online (Sandbox Code Playgroud)
接下来,当我从本地计算机尝试运行以下命令时:
.\my_deploy_package.cmd /M:https://machine_name:8172/msdeploy.axd -allowUntrusted /U:deploy_user /P:deploy_password /A:Basic /T
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:错误:远程服务器返回错误:(401)未经授权.
如果我在目标计算机上进入事件查看器>自定义视图> Administratove事件,我看到此消息出现"匹配"错误:
IISWMSVC_AUTHORIZATION_SERVER_NOT_ALLOWED
只允许Windows管理员使用服务器连接进行连接.其他用户应使用"连接到站点或应用程序"任务才能进行连接.
进程:WMSvc User = deploy_user
此错误与此问题中描述的完全相同.而接受的答案表明,我已经做是正确的做法.
我已经尝试了几种建议,就像这样,但似乎没有任何帮助.管理服务设置为允许远程连接(Windows和IIS管理器),并且我已经为内置Windows用户(非管理员)和IIS管理员用户运行配置,但仍然是相同的错误.但是,只要我与管理员用户一起运行deploy命令,它就会成功.
我被允许通过IIS gui与我的非管理员deploy_user用户远程连接(在IIS中:连接到站点> [服务器URL]/[站点名称]> deploy_user/deploy_password),表示已配置必要的权限和规则.但是,当我尝试运行部署脚本命令行(使用相同的用户)时,它会失败.
如果它实际上是因为错误消息指示,任何非管理员用户只能通过IIS管理器使用" 连接到站点"或"应用程序",那么从命令行/构建服务器执行此类部署的建议方法是什么?我真的不想在构建服务器的配置中以明文形式输入管理员用户的用户名/密码...
我发现有一个选项是,如果你的构建服务器和你试图部署的机器有一个共同的Active Directory(或其他共享用户的方式),你可以跳过这个/A:Basic标志,完全省去用户名和密码.您必须确保运行部署的用户也具有部署目标的管理员权限.但是,在我们的一个案例中,构建服务器和部署目标没有共同的用户群,因此这不是一个选项,我们将以明文形式返回用户名/密码 …
给出以下示例类:
public class MyClass
{
public string S { get; set; }
public int I { get; set; }
public DateTime D { get; set; }
private float F { get; set; }
private long l;
public MyClass()
{
S = "foo";
I = 42;
D = new DateTime(2011, 11, 11);
F = 3.14f;
l = 12435;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在我的应用程序中有myClass这个类的实例,请在调试模式(Visual Studio 2010)中逐步执行代码,并在某些时候将myClass类型转换为立即窗口,将显示以下内容:
{MyClass}
D: {11.11.2011 00:00:00}
F: 3.14
I: 42
l: 12435
S: "foo"
Run Code Online (Sandbox Code Playgroud)
获取对象及其所有值的字符串表示形式对于日志记录非常有用.有没有一个很好的方法来实现这一目标?
我猜立即窗口使用反射来循环所有字段和属性,但我想我会问,以防万一已存在一些效用函数或任何事情.