小编Ant*_*ony的帖子

每当使用异步时,ASP.Net MVC 4控制器都会挂起

我正在使用带有.Net 4.5和ASP MVC 4 RC的Visual Studio 2012 RC.每当我使用异步时它就会挂起.控制器操作方法使用异步,但本身不是异步控制器方法.

没有记录错误或抛出异常,但浏览器永远显示"正在等待www.myweb.local ".

// Simplest possible async
public class Waiter
{
    public async Task<int> GetValue()
    {
        await Task.Yield();
        return await Task.Factory.StartNew(() => 42);
    }
}

// simplest possible controller that uses the async
public class HomeController : Controller

    public ActionResult Index()
    {
        var waiter = new Waiter();
        var resultTask = waiter.GetValue();
        int result = resultTask.Result;

        // it never gets here 
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了这个答案中提到的事情,但它仍然不起作用.即.web.config包含

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
Run Code Online (Sandbox Code Playgroud)

魔术词await …

c# asp.net-mvc task-parallel-library async-await

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

有没有办法在C#中的对象初始化程序块中使用扩展方法

下面的简单演示捕获了我想要做的事情.在真正的程序中,我必须使用对象初始化块,因为它正在读取LINQ to SQL选择表达式中的列表,并且有一个值我要读取数据库并存储在对象上,但是对象没有我可以为该值设置的简单属性.相反,它有一个XML数据存储.

看起来我无法在对象初始化块中调用扩展方法,并且我无法使用扩展方法附加属性.

我对这种方法运气不好吗?唯一的替代方案似乎是说服基类的所有者为这种情况修改它.

我有一个现有的解决方案,我将BaseDataObject子类化,但是这个问题也没有出现在这个简单的例子中.对象将作为BaseDataObject进行持久化和恢复 - 转换和测试将变得复杂.

public class BaseDataObject
{

    // internal data store
    private Dictionary<string, object> attachedData = new Dictionary<string, object>();

    public void SetData(string key, object value)
    {
        attachedData[key] = value;
    }

    public object GetData(string key)
    {
        return attachedData[key];
    }

    public int SomeValue { get; set; }
    public int SomeOtherValue { get; set; }

}

public static class Extensions
{
    public static void SetBarValue(this BaseDataObject dataObject,
                                        int            barValue)
    {
        /// Cannot attach a property to BaseDataObject?
        dataObject.SetData("bar", …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods initializer

7
推荐指数
2
解决办法
883
查看次数

使用WiX为ASP.Net MVC网站生成安装程序

有没有人用过WiX为ASP.Net MVC网站生成安装程序?您是从Web项目中收集文件的吗?我找不到任何好的例子.似乎没有记录的方法来包含所有正确的文件,只包含正确的文件并将它们放在正确的位置.

如果您在安装程序项目中添加网站项目作为参考,并harvest=True在属性中设置,则会捕获所有网站文件,但是存在以下问题:

  • 包括一些不应被复制的文件,例如packages.config,Web.Debug.config似乎没有任何明确或简单的方法来排除它们(根据本讨论).
  • .website dll文件位于根目录中的错误位置而不是bin文件夹(根据此讨论)

但是,如果你不使用收获,你手动引用很多文件(例如,\Content\单独我在5个文件夹中有58个文件.大多数是jQuery UI),它们会不时变化,错误和遗漏很容易从WiX文件列表中错过.所以它确实应该自动保持同步.

我不同意这样的想法,即文件列表应该在WiX中明确指定而不是动态生成(这似乎是在第一个链接上建议的,措辞不是很清楚).如果我需要删除一个文件,我将从源控制系统中删除,不需要做额外的工作来维护两个并行但不同的目录 - 源代码管理中的一组文件,以及WiX中列出的相同文件.应该有一个版本的事实.网站源代码树中的所有文件(具有某些已知的异常,例如在运行时未使用packages.config)应包含在部署中.

出于公司原因,我没有太多选择在这个项目中使用WiX

asp.net-mvc installer wix

7
推荐指数
1
解决办法
2080
查看次数

如何枚举AWS账户中的所有SQS队列

如何通过API和.Net SDK以编程方式列出AWS账户中的所有SQS队列?

我已经在使用DynamoDb表做了类似的事情,这非常简单 - 你可以在循环中使用ListTables翻译结果,直到你拥有它们.

但是,等效的SQS Api端点,ListQueues是不同的,并没有那么有用.它最多返回1000个队列,没有分页选项.

是的,在我的案例中可以有超过1000个队列.我有一个查询返回1000个结果.它全部在1个区域,所以它与这个问题不一样.

amazon-sqs amazon-web-services aws-sdk

7
推荐指数
1
解决办法
707
查看次数

如何提取从 AWS EventBridge 中继到 ECS Fargate 的事件

我把这个问题表述如下:

  1. EventBridge 事件是否中继到 ECS 任务?(如果不转发事件,我看不出它有多大用处)。

  2. 如果事件被中继,那么如何能够从作为任务运行的 Node 应用程序中提取它。

某些上下文到期:可以设置 EventBridge 规则来触发 ECS Fargate 任务,作为源自 CodeCommit 的事件的结果。请注意,这里的问题是接收器/目标,而不是源。当我更新我的存储库时,我能够触发 Fargate 任务。我可以使用其他事件。我的挑战在于提取转发的事件(在这种情况下,是来自 Fargate 的存储库名称、commitId 等。)

EventBridge 文档清楚地说明了如何设置触发事件的规则,但对如何提取事件却一无所知——这是有道理的,因为接收器/目标文档将有必要的参考。但是 ECS 文档并不清楚如何提取中继事件。

我能够检查元数据和 process.env。我在任何一家商店都找不到该活动。

我添加了一个 CloudWatch 日志组作为同一规则的目标,并且能够提取事件。所以它肯定会中继到一些目标,但不确定事件是否会中继到 ECS 任务。

因此,问题出现了:事件是否中继到 ECS 任务?如果是这样,您将如何访问它?

amazon-web-services aws-event-bridge

7
推荐指数
0
解决办法
394
查看次数

Silverlight 2.0 - 无法获得我想要的文本换行行为

我无法让Silverlight 2.0按照我想要的方式布置文本.我希望带有换行符和嵌入式链接的文本,包装,就像网页中的HTML文本一样.

这是我最接近的:

<UserControl x:Class="FlowPanelTest.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=Microsoft.Windows.Controls" 
    Width="250" Height="300">
    <Border BorderBrush="Black" BorderThickness="2" >
      <Controls:WrapPanel> 
      <TextBlock x:Name="tb1" TextWrapping="Wrap">Short text. </TextBlock>
      <TextBlock x:Name="tb2" TextWrapping="Wrap">A bit of text. </TextBlock>
      <TextBlock x:Name="tb3" TextWrapping="Wrap">About half of a line of text.</TextBlock>
      <TextBlock x:Name="tb4" TextWrapping="Wrap">More than half a line of longer text.</TextBlock>
      <TextBlock x:Name="tb5" TextWrapping="Wrap">More than one line of text, so it will wrap onto the  following line.</TextBlock>
      </Controls:WrapPanel>
      </Border>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

但问题在于虽然文本块tb1和tb2将会进入同一行,因为它们有足够的空间完全存在,但是tb3以后不会在前一个块的同一行开始,即使它将包裹到下一行.

我希望每个文本块在同一行上从前一个文本块结束.我想在某些文本上放置click事件处理程序.我还想要段落休息.基本上我正在努力解决Silverlight 2.0的XAML子集中缺少FlowDocument和Hyperlink控件的问题.


回答答案中提出的问题:

为什么不使用不可点击文本的运行?如果我只在可点击的文本上使用单独的TextBlocks,那么这些文本仍然会受到上面说明的包装问题的影响.而TextBlock就在链接之前,而TextBlock就在之后.基本上所有这一切.看起来我没有很多机会在同一个TextBlock中放置多个运行.

使用RegExs和循环将链接与其他文本分开根本不是问题,问题是显示布局.

为什么不将每个单词放在WrapPanel中的单个TextBlock中除了是一个丑陋的黑客之外,这对于换行没有好处 - 布局不正确.

它还会使链接文本的下划线样式变成虚线.

这是一个示例,其中每个单词都在自己的TextBlock中.尝试运行它,请注意,换行符根本没有显示在正确的位置.

<UserControl x:Class="SilverlightApplication2.Page" …
Run Code Online (Sandbox Code Playgroud)

silverlight xaml text silverlight-2.0

6
推荐指数
2
解决办法
5270
查看次数

WPF/XAML:Typography.Capitals似乎没有任何效果

所有这些文本看起来都一样,但我试图让它们看起来不同.我想要小帽子文字.我在这里错过了什么让小帽子排版效果起作用?

要重现这一点,请打开Visual Studio 2008,Do File | New Project,创建一个新的Windows | WPF应用程序,将下面的标记粘贴到Window1.xaml中,然后运行它.

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <FlowDocumentReader>
        <FlowDocument>
            <Paragraph>
                <Run>Some text</Run> <LineBreak />
                <Run Typography.Capitals="SmallCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="AllSmallCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="PetiteCaps">Some text</Run> <LineBreak />
                <Run Typography.Capitals="AllPetiteCaps">Some text</Run> <LineBreak />
            </Paragraph>
        </FlowDocument>
        </FlowDocumentReader>
    </Grid>
</Window>   
Run Code Online (Sandbox Code Playgroud)

根据第一个答案,似乎如果你指定一个特定的字体,你可以到达某个地方.将FlowDocument开始标记更改为:

   <FlowDocument FontFamily="Palatino Linotype">
Run Code Online (Sandbox Code Playgroud)

..你得到SmallCaps和AllSmallCaps,但不是PetiteCaps或AllPetiteCaps.所以它取决于字体.但这引起了其他问题:

  • 为什么默认字体(看起来很像Times New Roman)不支持这些?
  • 其他广泛使用的字体(例如本地Courier New等价物)是否支持这些?
  • 是否有哪些字体支持的列表?
  • 有多少百分比的字体会支持这种情况 - 大多数,有些还是少数?
  • 你能否在代码中确定字体支持的内容 - 如果是这种情况,我可以伪造AllSmallCaps - 例如通过将文本转换为所有大写并缩放80%.但不是SmallCaps.

wpf xaml flowdocument smallcaps

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

可以Castle.Windsor自动解决具体类型

我们正在为C#项目评估IoC容器,Unity和Castle.Windsor都很突出.我喜欢Unity的一件事(NInject和StructureMap也这样做)是明显如何构造它们的类型不必在IoC容器中注册.

有没有办法在Castle.Windsor做到这一点?我对Castle很公平.温莎要说它不这样做吗?有没有设计理由故意不这样做,或者是疏忽,还是只是没有被视为重要或有用?

我知道container.Register(AllTypes...在温莎,但这不是一回事.它不是完全自动化的,而且非常广泛.

为了说明这一点,这里有两个NUnit测试通过Unity和Castle.Windsor做同样的事情.Castle.Windsor失败了.:

namespace SimpleIocDemo
{
    using NUnit.Framework;
    using Castle.Windsor;
    using Microsoft.Practices.Unity;

    public interface ISomeService
    {
        string DoSomething();
    }

    public class ServiceImplementation : ISomeService
    {
        public string DoSomething()
        {
            return "Hello";
        }
    }

    public class RootObject
    {
        public ISomeService SomeService { get; private set; }

        public RootObject(ISomeService service)
        {
            SomeService = service;
        }
    }

    [TestFixture]
    public class IocTests
    {
        [Test]
        public void UnityResolveTest()
        {
            UnityContainer container = new UnityContainer();
            container.RegisterType<ISomeService, ServiceImplementation>();
            // Root object needs no registration …
Run Code Online (Sandbox Code Playgroud)

.net castle-windsor ioc-container inversion-of-control unity-container

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

Powershell在函数调用后忽略表达式

这是一个powershell脚本:

function PickANumber()
{
  12
}

function GetTheAnswer()
{
  PickANumber + 30
}

$answer = GetTheAnswer
write-output "The answer is $answer"
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

The answer is 12
Run Code Online (Sandbox Code Playgroud)

据我所知,这是因为powershell函数调用在它们之间的参数或逗号周围没有括号,因此PickANumber + 30被解析为类似的东西PickANumber('+', 1)而不是PickANumber() + 1.这不是一个错误,未使用的args被简单地忽略(就像使用JavaScript一样).

如果你稍微改一下,那么答案是42:

function GetTheAnswer()
{
  $a = PickANumber
  $a + 30
}
Run Code Online (Sandbox Code Playgroud)

但肯定有一种方法可以在一条线上做到这一点吗?

我在这里张贴是因为这也会咬别人.

syntax powershell expression

6
推荐指数
2
解决办法
497
查看次数

VSTestHost.exe已停止工作 - 无法运行单元测试

微软的单元测试框架突然罢工.

当我尝试在VS2008中运行测试时,我收到一条消息"VSTestHost.exe已停止工作".

我在Vista上运行Visual Studio Team System 2008(版本9.0.30729.1 SP)并应用了所有更新.

"问题报告和解决方案"表明我"升级到Visual Studio Team Edition for Software Testers的最新零售版本",这是不对的.

我试过重启.
我试过"devenv/resetuserdata"

这些没有区别.

我想根据这个废话回到MbUnit,但这不是我的选择.
对于如何解决这个问题,有任何的建议吗?

unit-testing vstesthost visual-studio-2008

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