首先是一些背景.在2012年底,我们将vs2008解决方案迁移到了vs2010,但我们仍然以.NET 3.5为目标.(我只知道最新最好的!)
几周前,当人们开始收到这些错误时,我们对此设置没有任何问题:
"foo.csproj" (Rebuild target) (16:5) ->
  C:\...\foo.csproj(142,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
有趣的是,如果你查看项目文件,它引用v10是有道理的,因为我们不使用Visual Studio 2012.
这个错误立刻打击了我们几个人,甚至在几个月没有改变的旧代码分支上.
我怀疑一些更新被推到我们的机器上,这让事情变得混乱,但我不知道该怎么做.
短期的解决方案是安装VS 2012而不是使用它,但我希望有一些比这更清洁的东西.
.net asp.net visual-studio-2010 visual-studio-2008 visual-studio-2012
我们有一个自定义函数AppSettings.GetConnectionString(),它总是被调用来确定应该使用的连接字符串.这个功能如何工作对讨论来说并不重要.它足以说它返回一个连接字符串,我必须使用它.
我希望我的LINQ to SQL DataContext使用这个,所以我从dbml文件中删除了所有连接字符串信息并创建了一个带有默认构造函数的分部类,如下所示:
public partial class SampleDataContext
{
    public SampleDataContext() : base(AppSettings.GetConnectionString()) { }
}
这工作正常,直到我使用设计器将表拖放到图表中.将表拖入图表的行为将执行以下几项不必要的操作:
所有这一切都在我保存文件之前完成!
当我保存图表时,将重新创建设计器文件,它将包含自己的默认构造函数,该构造函数使用错误的连接字符串.当然这意味着我的DataContext现在有两个默认构造函数,我不能再构建了!
我可以撤消所有这些坏事,但这很烦人.我必须在每次更改后手动删除连接字符串和新文件!
无论如何我可以阻止设计师在不问的情况下做出这些改变吗?
使用这种AppSettings.GetConnectionString()方法的要求在游戏的后期很晚.我曾经使用过类似于它为我生成的东西.有很多地方调用默认构造函数.我知道我应该将它们全部更改为以另一种方式创建数据上下文(使用不同的构造函数,静态方法,工厂等).这种变化只会有点烦人,因为它只需要做一次.但是,我觉得,它正在回避真正的问题.dbml文件和配置文件仍然包含一个不正确的(如果未使用的)连接字符串,这最多可能会使其他开发人员感到困惑.
我正在使用SqlDependency类,并且一直尝试找不到SqlNotificationEventArgs对象的Type,Source和Info属性的可能组合列表.
这是迄今为止我发现的最接近的.但是,我知道这并不能涵盖所有内容,因为我已经看到了组合Change/Client/Error.
我真的很想知道我是否以最好的方式处理所有可能的情况.也就是说,只要有可能,我想重新建立"订阅".
例如,更改/客户端/错误是针对网络问题,该问题中断了SqlServer与我的应用之间的通信.一旦重新建立通信,我就能够成功恢复.
如果我举一些关于我所担心的例子,也许会有所帮助.对于我说"恢复"时的以下问题,我的意思是在运行时重新建立订阅,即无需人工干预.
我收到以下错误:
错误CS1704:已导入具有相同简单名称"Interop.xxx.dll,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null"的程序集.尝试删除其中一个引用或签名以并排启用.
我所看到的一切都说我引用了两个具有相同名称的程序集,我需要删除其中一个程序集.但是,我已经检查过了,我只引用了一次.
这也只发生在我使用msbuild从我的开发框上的命令行构建时.如果我通过Visual Studio构建或在我们的CI服务器上进行干净构建,我不会看到此错误.
我已经尝试完全删除所有源代码并从头开始构建更接近于构建机器但没有运气.
我们希望在同一台机器上运行两个.NET应用程序相互通信.我们想要三个项目.包含接口的库.实现接口的"服务器"应用程序和使用接口与服务器通信的"客户端"应用程序.我们不希望客户端引用服务器.
我们有一个测试应用程序使用远程处理,但最近发现远程处理正在被WCF取代.由于这是新的开发,我们觉得我们应该使用WCF,但我们还没有设法使它与WCF一起使用并且想知道它是否可能?
很抱歉我上面没有详细信息,但我当时无法访问任何代码.我正和另外两个人一起参与这个项目,并没有密切关注他们的IPC内容.我知道他们目前认为WCF无法做他们想做的事情,我希望能够向他们展示它可以.
我已经开始关注我的同事尝试,并将继续按照我的理解更新这篇文章.
下面是他们用于远程处理的测试代码的简化版本.他们希望能够使用WCF执行此操作,但到目前为止还无法使其工作.
ServiceApp和ClientApp程序集都引用Lib程序集.他们没有互相参考.
当我能够更好地解释他们在WCF中复制此行为的尝试时,我将再次编辑它.此时我真正知道的是,他们正在使用NetNamedPipeBinding并且客户端应用程序遇到问题,因为它无法访问服务程序集.
下面是WCF测试代码的简化版本.
ClientProgram的以下行引发异常:
IMessage msg2 = service.CreateMessage("Hello World");
这是一个例外:
Could not load file or assembly 'ServiceApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
在试图理解史蒂文的最新评论时,我用谷歌搜索了IMetadataExchange,这当然是第一次点击MSDN页面.这个页面说:
无需在服务实现中实现MetadataReference协定.而是将ServiceMetadataBehavior添加到服务描述中.
或者,在使用配置时,将端点元素的contract属性设置为IMetadataExchange.有关示例,请参见如何:使用配置文件发布服务的元数据.
有关在WCF中发布元数据的详细信息,请参阅发布元数据.
因为,对于此示例,我不使用配置文件,而是选择转到" 发布元数据"链接.从那里我去了如何:使用代码发布服务的元数据链接,这个例子我用来修改我的服务应用程序代码.添加的代码在第15-20行.
我做了一点工作后就能添加服务参考.该服务必须正在运行,但如果您通过Visual …
我最近遇到了一段非常像这样的代码:
var nHours = parseInt(txtHours);
if( isNaN(nHours))  // Do something
else // Do something else with the value
谁写了这个代码的开发人员的印象是,在nHours要么是完全匹配的整数txtHours或NaN.这个假设有几个问题.
首先,开发人员留下的radix参数意味着输入"09"将导致值0而不是9.这个问题可以通过添加基数来解决:
var nHours = parseInt(txtHours,10);
if( isNaN(nHours))  // Do something
else // Do something else with the value
接下来,输入"1.5"将导致值1而不是NaN开发人员预期的值,因为1.5它不是整数.同样,值"1a"将导致值1而不是NaN.
所有这些问题都是可以理解的,因为这是如何将字符串转换为整数的最常见示例之一,并且大多数地方不讨论这些情况.
无论如何,它让我觉得我不知道有任何内置的方法来获得这样的整数.有Number(txtHours)(或+txtHours)接近但接受非整数数字null并将其""视为0而不是NaN.
为了帮助开发人员,我提供了以下功能:
function ConvertToInteger(text)
{ …我的情况类似于描述的可能返回 default(T) 的异步通用方法的正确可为空注释。
但是,我想知道让调用者知道“返回值”可能为空的正确方法。
    public async Task<T> GetAsync<T>()
    {
        // sometimes returns default(T)!;
    }
如果这不是异步方法,我可以使用 MaybeNull 属性。
    [return: MaybeNull]
    public T Get<T>()
    {
        // sometimes returns default(T)!;
    }
如果它不是通用的,我可以只使用?语法。
    public async Task<string?> GetAsync()
    {
        // sometimes returns default(string)!;
    }
有没有办法让调用者知道它可以为空而不添加通用约束?
编辑:澄清我的意思是让编译器知道任务中的值可能为空。我想反过来也是如此。我最感兴趣的是这应该如何与新的 C# 可为空引用语法一起工作。
我可以做这样的事情就好了
    var a = await GetAsync<string?>(); // a is null
    var b = await GetAsync<int?>(); // b is null
    var c = await GetAsync<string>(); // c is null.  Wait string is not supposed …让我假装由于某种原因我想创建一个派生自Control而不是WebControl的自定义控件.让我们假设我需要处理属性(即实现IAttributeAccessor),并且我想通过像WebControl一样使用AttributeCollection来实现.
WebControl实现Attributes属性,如下所示:
public AttributeCollection Attributes
{
    get
    {
        if (this.attrColl == null)
        {
            if (this.attrState == null)
            {
                this.attrState = new StateBag(true);
                if (base.IsTrackingViewState])
                {
                    this.attrState.TrackViewState();
                }
            }
            this.attrColl = new AttributeCollection(this.attrState);
        }
        return this.attrColl;
    }
}
请注意以下事项:
因此,据我所知,如果我想使用AttributeCollection,我必须使用一个新的StateBag,它永远不会(不采用像反射这样的技巧)实际正确地管理状态.
我错过了什么吗?
我有一个非常简单的控制台应用程序,无法查看远程专用队列中的消息。
var queues = MessageQueue.GetPrivateQueuesByMachine(machineName);
var queue = queues.Where(x=>x.FormatName == queueName).Single();
Message message = queue.Peek();
Peek 调用失败,并出现“访问消息队列系统被拒绝”的 MessageQueueException。
使用相同的客户端计算机和用户,我可以使用队列资源管理器和消息队列管理单元查看队列。
在使用本地队列进行实验时,我只能通过取消队列上的 Peek 权限来重现错误,但这也会在其他工具中阻止它。
我看到的很多信息都指出了此处概述的问题。
然而,似乎如果这些事情中的任何一个是问题,我也无法使用其他工具来完成它。
编辑 我已经能够使用MSMQQueueInfo / MSMQQueue COM 对象使其正常工作,而无需更改任何凭据。如果我可以使用 .NET 库使其工作,那就太好了,但至少我有一个解决方法。
我一直在使用原型库一段时间,偶尔会发现自己希望我有多个访问级别(公共,私有和受保护).到目前为止我最接近的是以下内容:
SampleBase = Class.create({
    /* virtual public constructor */
    initialize: function(arg1, arg2)
    {
        // private variables
        var privateVar1, privateVar2;
        // private methods
        var privateMethod1 = function() { }
        function privateMethod2() { }
        // public (non virtual) methods
        this.publicNonVirtual1 = function() { return privateVar1; }
        this.publicNonVirtual2 = function() { return privateVar2; }
    },
    // public methods (that cannot access privates)
    publicVirtual1: function() { /* Cannot access privates here. */ },
    publicVirtual2: function() { /* Cannot access privates here. */ }
}); …c# ×7
.net ×2
asp.net ×2
javascript ×2
async-await ×1
datacontext ×1
generics ×1
inheritance ×1
integer ×1
linq-to-sql ×1
msbuild ×1
msmq ×1
prototypejs ×1
reference ×1
remoting ×1
string ×1
theory ×1
viewstate ×1
wcf ×1