小编Hen*_*gyi的帖子

在VS2010中更改Web项目中的输出路径

我有几个ASP.NET Web项目,其Output文件夹设置为"C:\ Builds\[ProjectName] bin"(而不是默认的"bin \"文件夹).这使得"F5"调试无法正常工作,因为ASP.NET Development Server需要项目文件夹下的"bin"文件夹.

然后我改为使用本地IIS Web服务器(http:// localhost/webproject1")并手动将vdir物理路径更新到我的自定义输出路径.但是VS2010不会加载csproj,因为它检测到url已经映射到了不同文件夹位置.

我知道我可能不应该更改Output文件夹.但想知道是否有一种简单的方法来解决这个问题?目标是使用自定义构建输出文件夹进行"F5"调试.


由于Aristos的回答更新:

谢谢Aristos.不幸的是,这不会解决问题.我的所有项目都已使用Project Reference,因此所有引用dll都被正确复制到输出文件夹中.F5调试不起作用的原因是因为输出文件夹不是正常的"bin"子文件夹,而是在其他一些路径中说C:\BuildsOut\Foo\bin.

似乎为了使用F5来调试VS2010中的Web项目,它必须使用默认的输出路径"bin".如果你改变它,那么F5将无法工作,更糟糕的是你的项目甚至可能无法加载.

c# asp.net visual-studio-2010 vs-web-application-project

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

如何使用XmlSerializer插入xml字符串

我已经定义了以下类:

public class Root
{
    public string Name;
    public string XmlString;
}
Run Code Online (Sandbox Code Playgroud)

并创建了一个对象:

Root t = new Root 
         {  Name = "Test", 
            XmlString = "<Foo>bar</Foo>" 
         };
Run Code Online (Sandbox Code Playgroud)

当我使用XmlSerializer类来序列化这个对象时,它将返回xml:

<Root>
  <Name>Test</Name>
  <XmlString>&lt;Foo&gt;bar&lt;/Foo&gt;</XmlString>
</Root>
Run Code Online (Sandbox Code Playgroud)

我如何使它不编码我的XmlString内容,以便我可以获得序列化的xml

<XmlString><Foo>bar</Foo></XmlString>
Run Code Online (Sandbox Code Playgroud)

谢谢,伊恩

c# xml serialization

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

如何强制调用C#派生方法

我有一个由某个工具生成的类,因此我无法更改它.生成的类非常简单(没有接口,没有虚拟方法):

class GeneratedFoo
{
  public void Write(string p) { /* do something */ }
}
Run Code Online (Sandbox Code Playgroud)

在C#项目中,我们想提供一种方法,以便我们可以插入MyFoo的不同实现.所以我想让MyFoo从GeneratedFoo派生

class MyFoo : GeneratedFoo
{
  public new void Write(string p) { /* do different things */ }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个CreateFoo方法,它将返回GeneratedFoo或MyFoo类的实例.但是它总是调用GeneratedFoo中的方法.

GeneratedFoo foo = CreateFoo(); // if this returns MyFoo,
foo.Write("1"); // it stills calls GeneratedFoo.Write
Run Code Online (Sandbox Code Playgroud)

这是因为它不是虚方法而被删除.但我想知道是否有一种方法(可能是黑客)让它调用派生方法.

谢谢,
伊恩

c# inheritance class

7
推荐指数
3
解决办法
6494
查看次数

实体框架和MVC中的乐观并发模型

我在ASP.NET MVC控制器中有以下更新代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Person(int id, FormCollection form)
{
  var ctx = new DB_Entities(); // ObjectContext
  var person = ctx.Persons.Where(s => s.Id == id).FirstOrDefault(); 
  TryUpdateModel(person, form.ToValueProvider()); 
  ctx.SaveChanges(); 
  return RedirectToAction("Person", id);
}
Run Code Online (Sandbox Code Playgroud)

但是,此更新代码是Last-Writer-Wins.现在我想添加一些并发控制.Person表已经有SQL时间戳列.我是否必须将时间戳值作为隐藏值发送给客户端并在回发中手动处理?或者,实体框架中是否有标准模式来执行此操作?

谢谢.

c# asp.net-mvc concurrency entity-framework

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

使用.NET 4.5构建的应用程序可以在.NET 4.0上运行吗?

我的项目是针对.NET 4.5.它不使用任何新的4.5方法,所以它实际上只在安装了.NET 4.0的机器上正常工作.

在我添加一些扩展方法和反射之前,这一切都很好.然后当我在4.0机器上运行这个.NET 4.5程序时,它失败了"System.TypeLoadException:无法从程序集mscorlib加载类型'System.Runtime.CompilerServices.ExtensionAttribute'".着名的ExtensionAttribute程序已在此处记录良好.

另一种快速测试方法是添加以下行.然后程序将仅在.NET 4.0上运行时抛出异常.

Console.WriteLine(typeof(System.Runtime.CompilerServices.ExtensionAttribute).Assembly.FullName);
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法解决它.例如,ILMerge(当使用链接中记录的正确/ targetplatform选项时)实际上将ExtensionAttribute从mscorlib更改为System.Core(如果项目是针对.NET 4.0(安装了4.5)).但它似乎不适用于针对.NET 4.5的项目.

我知道这是一个很长的镜头.但只是想知道是否有人有其他想法,因为它是如此接近.

谢谢.

.net c# .net-4.0 .net-framework-version .net-4.5

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

防止在ASP.NET MVC和实体框架中更新未更改的值

我正在使用ASP.NET MVC和Entity Framework.我有一个编辑人员网页,其中可以编辑人员的字段,然后在回发操作中,我使用以下代码.

var person = objectCtx.Persons.Where(s => s.Id == id).FirstOrDefault();
TryUpdateModel(person, form.ToValueProvider());
objectCtx.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

它很棒.但是在生成的SQL中,即使值没有更改,我仍然可以看到UPDATE语句.有没有办法在ASP.NET MVC或实体框架中避免这种情况?

c# asp.net-mvc entity-framework

5
推荐指数
1
解决办法
2324
查看次数

在MVC 4 async ApiController中使用Task.Factory.StartNew?

我正在使用MVC4 ApiController将数据上传到Azure Blob.以下是示例代码:

public Task PostAsync(int id)
{
    return Task.Factory.StartNew(() => 
    {
        // CloudBlob.UploadFromStream(stream);
    });
}
Run Code Online (Sandbox Code Playgroud)

这段代码甚至有意义吗?我认为ASP.NET已经在工作线程中处理请求,因此在另一个线程中运行UploadFromStream似乎没有意义,因为它现在使用两个线程来运行此方法(我假设原始工作线程正在等待此UploadFromStream完成?)

所以我的理解是,如果我们使用一些内置的异步方法,例如HttpClient.GetAsync或SqlCommand.ExecuteReaderAsync,async ApiController才有意义.这些方法可能在内部使用I/O完成端口,因此它可以在执行实际工作时释放线程.所以我应该将代码更改为此?

public Task PostAsync(int id)
{
    // only to show it's using the proper async version of the method.
    return TaskFactory.FromAsync(BeginUploadFromStream, EndUploadFromStream...)
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果Post方法中的所有工作都是CPU /内存密集型,那么异步版本PostAsync将无助于请求的吞吐量.最好只使用常规的"public void Post(int id)"方法,对吗?

我知道这是很多问题.希望它能澄清我对ASP.NET MVC中异步使用的理解.谢谢.

multithreading asynchronous c#-4.0 asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
1372
查看次数