小编ken*_*n2k的帖子

将所有警告视为错误

这应该是显而易见的,但我无法让它工作......

我想要做的很简单:如果有警告,我希望我的编译失败并出现错误.是的,着名的TreatWarningsAsErrors......

我在我的C#项目属性中配置它

将警告视为错误

这导致TreatWarningsAsErrors我的csproj 中的预期部分:

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
Run Code Online (Sandbox Code Playgroud)

到目前为止private一切顺利,如果我在我的代码中添加一个无用的变量,它会导致编译错误:

private int unused;
Run Code Online (Sandbox Code Playgroud)

错误3警告错误:从不使用字段'XXXX.unused'

但整个问题是,我无法使其适用于装配参考问题.如果我有一个未知程序集的引用,编译器(devenv或msbuild)会发出警告,但我想要一个错误.

最终,我正在尝试配置一个gated check-in TFS构建配置,因此如果找不到 " 引用的组件'XXXX',TFS将拒绝提交. "警告.比修改构建过程模板更简单的东西会很棒.

.net c# msbuild tfs warnings

42
推荐指数
2
解决办法
2万
查看次数

使用TLS 1.2将客户端连接到TCP服务器

我正在努力将设备连接到.Net(4.5.2)服务器.它是由设备打开的TCP连接,使用TLS 1.2.

  • 在服务器端,我有一个TCP服务器的标准.Net实现:SslStream通过DotNetty包装
  • 我无法更改设备上的任何内容

任何.Net客户端都可以使用安全的TLS连接成功连接到我的服务器.它在使用CURL时也正常工作,所以我得出结论我的TCP服务器工作正常.

所以我比较了(使用Wireshark)工作客户端发送的内容与无法连接的设备发送的内容.我发现的显着差异是客户端Hello TLS消息中缺少(对于设备)服务器名称扩展(SNI).

我接下来尝试的是使用Pcap.Net手动将数据发送到我的服务器,即使用原始字节数组手动发送TCP SYN/TCP ACK /客户端Hello消息(我从尝试连接的设备获得的原始数据(感谢Wireshark)到我的服务器).我确认通过添加服务器名称扩展来调整不工作的客户端Hello原始字节数组会导致我的TLS握手工作.

所以很明显我遇到了一个问题,那就是不包含SNI扩展的客户端和一个拒绝握手的服务器,如果这个信息不存在的话.

如何更改TCP服务器接受不提供服务器名称扩展的客户端的行为方式?是否有可能首先使用标准的.Net SslStream类?

AFAIK,SNI扩展不是强制性的,由客户决定是否使用它,因此服务器理论上应该接受没有它的客户端Hello消息.

任何指针都将非常感激.

.net c# ssl tcp netty

18
推荐指数
1
解决办法
4128
查看次数

TFS2010:检索与分支关联的所有更改集(完全递归)

这是我之前关于TFS 2010的问题以及创建更改日志的可能性.

我以前使用标签来识别程序的版本,但由于标签不是固定的时间点,现在我正在使用分支机构.

以下是分支层次结构的外观:

分支层次结构

如您所见,有两个不同的应用程序是主干的分支:( APP_A应用程序A)和APP_B(应用程序B).两者几乎完全相同,但存在一些功能差异.

以下是创建应用程序新版本(例如版本1.3)的过程:

  1. Main trunk被修改(新功能的添加,bug修复...)
  2. 从修改后Main trunk,创建一个新分支:Main trunk 1.3
  3. APP_A分支可能被修改,因此独特的功能APP_A将适用于修改v1.3
  4. APP_B分支可能被修改,因此独特的功能APP_B将适用于修改v1.3
  5. Main trunk 1.3合并到APP_AAPP_B,所以两者APP_AAPP_B应用程序都接受修改Main trunk
  6. 从修改的APP_A分支中,创建一个新分支:APP_A_1.3
  7. 从修改的APP_B分支中,创建一个新分支:APP_B_1.3

我的目标是能够在APP_A_1.3和之间生成更改日志APP_A_1.2.

通过changelog我的意思是WorkItems列表.签入的每个变更集都与一个或多个WorkItem(例如Bug项)相关联.我希望能够获得链接到受影响的变更集的所有工作项列表APP_A_1.3:这些变更集可能来自Main trunk(上面的步骤1),APP_A branch(上面的步骤3)甚至APP_A_1.3分支本身(如果是修补程序是在创建分支后签到).

为了获得这个工作项列表,我试图得到所有"链接"的变更集列表APP_A_1.2("链接"=变更集中签入的代码现在在分支上APP_A_1.2)以及所有变更集的列表是"联系"的 …

c# branch changelog tfs2010 tfs-workitem

17
推荐指数
1
解决办法
4397
查看次数

Azure IoT Hub中的TCP支持

Azure IoT Hub支持AMQP,MQTT,HTTP协议.为了自定义这些协议,我们有Azure IoT协议网关.我可以在MQTT协议定制上找到好的样本.我需要一些使用Azure IoT协议网关进行基于TCP的协议自定义的示例代码.

编辑(为了得到答案): OP提出的问题是使用Azure协议网关支持基于TCP的专有协议的示例.目前,IoT中心仅支持AMQP,MQTT和HTTP.虽然这些协议实际上依赖于TCP,但如果没有额外的AMQP,MQTT或HTTP层,则集线器不支持直接TCP连接.正如解释在这里,我们需要一个定制的基于TCP协议的一个基本的例子.

想象一下,一个基本设备只能通过TCP在给定的IP地址/端口上发送一些专有的有效载荷:我们需要一个网关定制的例子,允许该设备将数据发送到集线器.

协议网关的当前代码设计很差,因为它严重依赖于MQTT.

也加上一些赏金.

c# tcp azure iot azure-iot-hub

14
推荐指数
1
解决办法
1951
查看次数

如何对Azure SQL数据库使用嵌套的TransactionScopes

我目前正在尝试使用嵌套事务作用域来对Azure SQL数据库进行数据库访问.

我正在使用以下代码(.Net 4.5.1,我的代码一直是异步,它是带有EF6.1的ASP.Net MVC):

public async Task Test()
{
    // In my actual code, the DbContext is injected within the constructor
    // of my ASP.Net MVC Controller (thanks to IoC and dependency injection)
    // The same DbContext instance is used for the whole HttpRequest
    var context = new TestContext();

    using (var t1 = StartTransactionForAsync())
    {
        using (var t2 = StartTransactionForAsync())
        {
            context.Users.Add(new User { Name = Guid.NewGuid().ToString() });
            await context.SaveChangesAsync();

            t2.Complete();
        }
        ... // Some more code here
        t1.Complete(); …
Run Code Online (Sandbox Code Playgroud)

c# msdtc transactions azure async-await

12
推荐指数
1
解决办法
1451
查看次数

TFS 2010:如何使用标签在两个版本的应用程序之间生成更改日志(即工作项列表)?

我正在寻找一种方法来自动生成我的应用程序的两个版本之间的更改日志(实际上是一个工作项列表).我有两个版本的应用程序,v1和v2,每个版本都由TFS 2010(LABEL1和LABEL2)中的标签标识,我在构建应用程序的设置之前手动创建了该标签.我有一个分支系统,这意味着我有一个主干,大多数错误是固定的,并且一个分支,其中补丁主要使用来自主干的合并(但在分支上也有一些修复只与主干无关) .我的应用程序的两个版本(v1和v2)是分支的版本.

我希望TFS 2010能够返回这两个标签之间已修复的错误列表(即,类型= Bug的工作项列表已关闭并验证).

我尝试使用TFS 2010的Web UI或使用Visual Studio实现此目的,但我没有找到任何方法.

然后我尝试使用以下命令行向tf.exe询问历史记录:

tf history /server:http://server_url/collection_name "$/project_path" /version:LLABEL1~LLABEL2 /recursive /noprompt /format:brief
Run Code Online (Sandbox Code Playgroud)

其中LABEL1是与应用程序的v1的源代码关联的标签,LABEL2是与应用程序的v2的源代码关联的标签.它实际上以两种方式失败: - 命令行只返回变更集列表,而不是关联的已关闭工作项列表 - 变更集列表仅包含我在分支本身上应用的变更集,而不是我也应用的变更集和主干然后合并到分支.设置与否"/ slotmode"参数不会改变任何内容.

在那里,我尝试编写一段C#代码来检索工作项列表(而不是变更集列表):

var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://server_url/collection_name"));

VersionControlServer controlServer = tfs.GetService<VersionControlServer>();
VersionControlServer vcs = tfs.GetService<VersionControlServer>();

VersionSpec sFrom = VersionSpec.ParseSingleSpec("LLABEL1", null);
VersionSpec sTo = VersionSpec.ParseSingleSpec("LLABEL2", null);

var changesets = vcs.QueryHistory(
    "$/project_path",
    sTo,
    0,
    RecursionType.Full,
    null,
    sFrom,
    sTo,
    int.MaxValue,
    true,
    false); // Slotmode to false

Dictionary<int, WorkItem> dico = new Dictionary<int, WorkItem>();
foreach (Changeset set in changesets)
{ …
Run Code Online (Sandbox Code Playgroud)

c# tfs branch workitem tfs2010

11
推荐指数
1
解决办法
9181
查看次数

如何正确关闭客户端代理(远程主机强行关闭现有连接)?

在你将问题读到最后之前,请不要关闭.我已经谷歌搜索了几个小时没有成功.


编辑:现在我确信它与WCF缓存打开TCP连接(连接池)的方式有关.请在问题结尾处查看编辑#5.


我基本上有一个使用netTcpBinding配置的WCF服务.即使我正常关闭客户端代理(请参阅下面的代码),服务器也始终记录" System.Net.Sockets.SocketException (0x80004005): An existing connection was forcibly closed by the remote host".

我已经将问题缩小到我能写的最基本的WCF示例.我每次关闭客户端应用程序时都会在WCF跟踪生成的日志中获得异常.我在自己的代码中没有得到任何异常,这意味着它按预期工作,我无法调试任何东西,看看WCF在我的日志中添加错误出了什么问题.

服务接口/实现:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string DoWork();
}
...
public class Service1 : IService1
{
    public string DoWork()
    {
        return "12";
    }
}
Run Code Online (Sandbox Code Playgroud)

服务器端配置:

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <services>
      <service name="WebApplication1.Service1">
        <endpoint …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf tcp nettcpbinding

11
推荐指数
1
解决办法
5010
查看次数

为什么BufferedStream.Write会抛出"此流不支持搜索操作"?

这个让我困惑.当我甚至没有打电话时,我收到关于寻找的错误?

我的代码看起来像这样:

// send 42
uint value = 42;
byte[] msg = BitConverter.GetBytes(value);
stream.Write(msg, 0, sizeof(uint));
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

System.NotSupportedException was unhandled
Message="This stream does not support seek operations."
Source="System"
StackTrace:
   at System.Net.Sockets.NetworkStream.Seek(Int64 offset, SeekOrigin origin)
   at System.IO.BufferedStream.FlushRead()
   at System.IO.BufferedStream.Write(Byte[] array, Int32 offset, Int32 count)
...
Run Code Online (Sandbox Code Playgroud)

流是类型System.IO.BufferedStream.可能会发生什么?

编辑更多信息:

sizeof(uint)==msg.length在这种情况下.
流声明为stream = new BufferedStream(new NetworkStream(socket), 1024)

编辑:

就是这样!虽然可以在一个单独读取和写入NetworkStream,但当切换到BufferedStream它时,必须有一个单独的读取和写入.显然,只需NetworkStream在同一个套接字上调用构造函数两次即可.

如果可以的话,我会接受Justin和Hans的答案,因为我让我完全理解错误,另一个让我找到解决方案.感谢大家!

c# networkstream bufferedstream

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

从ASP.Net Core 1.1迁移到2.0时BadImageFormatException

我刚刚将ASP.Net Core 1.1应用程序迁移到刚刚发布的新2.0版本.现在我得到以下异常:

System.BadImageFormatException:'无法加载文件或程序集'dotnet-aspnet-codegenerator-design'或其依赖项之一.试图加载格式不正确的程序.

在以下行(AddMvc)上抛出异常:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    ...
    services.AddMvc(options =>
        {
            options.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline)));
        })
        .AddJsonOptions(options =>
        {
            // Maintain property names during serialization. See:
            // https://github.com/aspnet/Announcements/issues/194
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
        })
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        .AddDataAnnotationsLocalization();
}
Run Code Online (Sandbox Code Playgroud)

讨厌的例外截图

我使用AnyCPU目标平台瞄准.Net Framework 4.7 .如果有任何帮助,我正在使用win10-x64 RID.每个Nuget包都是最新的等.

任何的想法?谷歌搜索我没有运气.

c# asp.net asp.net-mvc asp.net-core asp.net-core-2.0

8
推荐指数
1
解决办法
2656
查看次数

Azure CloudBlockBlob.在DownloadToStream中找不到blob.Uri似乎重复了?

我正在使用Azure开发Blob存储..

上传blob工作得很好,我可以双击visual studio blob容器视图中上传的图像并打开图片...

但如果你看看这张照片:

在此输入图像描述

...... Uri有问题吗?

这是我正在使用的代码:

public MemoryStream DownloadBlob(int id)
    {
        Photo photo = PhotoServices.GetPhotoById(id);
        var cloudBlobContainer = _blobClient.GetContainerReference(CurrentBlobContainerName);
        var blob = cloudBlobContainer.GetBlockBlobReference(photo.BlobUrl);
        var memorystream = new MemoryStream();

// THIS LINE GIVES BLOB NOT FOUND EXCEPTION
        blob.DownloadToStream(memorystream);

       memorystream.Position = 0;
       return memorystream;
Run Code Online (Sandbox Code Playgroud)

这是我如何存储blob:

public CloudBlockBlob UploadBlob(Stream fileStream, string fileName)
    {
        var blobName = Guid.NewGuid() + fileName;
        var blockBlob = GetContainer().GetBlockBlobReference(blobName);

        blockBlob.UploadFromStream(fileStream);
        return blockBlob;
    }
Run Code Online (Sandbox Code Playgroud)

这是我如何得到blob:

public MemoryStream DownloadBlob(int id)
    {
        Photo photo = PhotoServices.GetPhotoById(id);
        var cloudBlobContainer = _blobClient.GetContainerReference(CurrentBlobContainerName); …
Run Code Online (Sandbox Code Playgroud)

c# azure azure-storage azure-storage-blobs

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