小编Tha*_*dis的帖子

静态变量实例和AppDomains,发生了什么?

我有

public static class A
{
   public static string ConnString;
}

[Serializable]
public class Test{
   // Accesing A's field;
   public string ConnString{get{return A.ConnString;}set{A.ConnString=value;}}
}

void Main()
{
   A.ConnString = "InitialString"; // I set A.ConnString in the current domain

   var newDomain = AppDomain.CreateDomain("DomNew");
   Test TObj = newDomain.CreateInstanceAndUnwrap(typeof(Test).Assembly.FullName, typeof(Test).FullName) as Test ;

   TObj.ConnString = "NewDomainString"; // It is supposed to set A.ConnString in the newDomain aka a different instance of A.ConnString

   // Here it is supposed to print two different values
   Console.WriteLine(A.ConnString); …
Run Code Online (Sandbox Code Playgroud)

c# variables static instance appdomain

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

管理扩展中的现有连接被强制关闭,VS 2019

刚刚在一台新笔记本电脑上安装了 vs2019 社区。

要去安装一些扩展,我看到了这个

在此输入图像描述

如果我刷新几次,我可能会看到扩展程序,但在下一次刷新或转到扩展程序的下一页时,我会看到相同的内容。

不知道发生了什么、为什么以及如何解决。

更新

我尝试从市场站点安装扩展。失败了

在此输入图像描述

我打开日志,再次出现同样的错误:

14/05/2021 17:52:17 - One or more errors occurred.
14/05/2021 17:52:17 -    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at Microsoft.VisualStudio.ExtensionManager.VSGalleryRepository.GetExtensions[T](List`1 extensionIds, Int32 lcid, Boolean forAutoupdate)
   at VSIXInstaller.ExtensionPackService.GetExtensionByVsixId(List`1 vsixIds, String extensionPackParentName, IExtensionEngine extensionEngine, List`1 extensionsToInstall, CancellationToken cancellationToken)
14/05/2021 17:52:17 - END: Gathering extension pack information
14/05/2021 17:52:17 - END: Processing extension pack
14/05/2021 17:52:17 - System.AggregateException: One or more errors occurred. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. …
Run Code Online (Sandbox Code Playgroud)

visual-studio visual-studio-extensions

9
推荐指数
1
解决办法
2330
查看次数

没有 AMD 的 Select2 自定义数据适配器

我想为 select2 创建一个自定义数据适配器,但我在网上看到的示例都使用了 AMD。我们不在我们的项目中使用 AMD。如何创建我的自定义 dataAdapter?实现currentquery方法的普通对象是不够的。

javascript jquery-select2 jquery-select2-4

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

Vue 模板中有关 JSX 的 ESLint 错误

我有一个 vue 单文件组件,其中模板部分如下所示

<template>
   <Card>
      /// rest of template here ///
   </Card>
</template>
Run Code Online (Sandbox Code Playgroud)

Card是一个导入的Vue组件。

由于某种原因,我不明白,VSCode 中的 ESLint 用红线强调了该元素,并警告我Card cannot be used as a JSX component. 我已经使用 vue 安装并配置了 eslint 以及我能找到的每个在线教程,并且警告不会消失。

关于我应该配置什么来删除这个愚蠢的警告有什么想法吗?

jsx eslint vue.js

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

ThreadPool.QueueUserWorkItem 和 Task.Factory.StartNew 之间的性能差异

我有一个ThreadPool.QueueUserWorkItem在几个地方使用的代码库。我认为这将是使用一个好主意,切换ThreadPool.QueueUserWorkItem到使用Task.Factory.StartNewTaskScheduler.Default作为调度。

升级后,我看到应用程序的执行时间非常高。它作为在线跨国应用,接收请求,并且典型地之间响应40毫秒500毫秒,其是可接受的。切换到 Tasks 方式后,我看到许多事务需要 4000 毫秒甚至 38000 毫秒才能响应,这是不可接受的。

流程相当复杂。它涉及传入事务的同步循环,它实际上执行简单的验证并插入到数据库中。之后,一些并行动作被触发,主循环继续下一个传入的事务。并行操作主要是日志记录和数据的 db 密集质量检查。

所有日志操作都是在 ThreadPool 中启动的

ThreadPool.QueueUserWorkItem(/*logging action*/)
Run Code Online (Sandbox Code Playgroud)

质量检查行动是由

Task.Factory.StartNew(/*qc action*/,
     TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness)
Run Code Online (Sandbox Code Playgroud)

应用更改后,日志记录操作已切换到

Task.Factory.StartNew(/*logging action*/,
     CancellationToken.None,
     TaskCreationOptions.None,
     TaskScheduler.Default)
Run Code Online (Sandbox Code Playgroud)

并且质量检查动作被切换到

Task.Factory.StartNew(/*qc action*/,
     CancellationToken.None,
     TaskCreationOptions.LongRunning | TaskCreationOptions.PreferFairness,
     TaskScheduler.Default)
Run Code Online (Sandbox Code Playgroud)

当在 ThreadPoolScheduler (TaskScheduler.Default) 上使用 Task.Factory.StartNew 执行时,日志记录操作是否有可能阻止质量检查操作,但是当使用 QueueUserWorkItem 直接在 ThreadPool 上执行时,它们没有?

有没有一种可能性,即TaskCreationOptions.PreferFairness在质量检查行动的标志,使得质量检查的等待,即使该标志不会在设置记录操作开始?

c# .net-4.0 threadpool task-parallel-library taskscheduler

5
推荐指数
0
解决办法
2267
查看次数

选择2:预选项目并通过templateSelection更正渲染

使用Select2 v4时,以编程方式设置所选值的建议(实际上是正确的)方法是操作底层的select元素,添加所需的<option>元素,设置值$selectElement.val(<value>)并触发.trigger('change')事件,以便select2插件自行更新来自底层的选择元素.你可以看到这个在这里.

这个问题是当你定义了一个templateSelection,它不仅返回所选值的文本,而且还返回一个完整的HTML DOM(例如,你可以应用样式,添加图像,图标等等,并将其作为渲染选择返回).

templateSelection接受输入,因为它来自数组数据源或ajax数据源等.每个项目代表一个选项,但它可能不仅仅是和idtext.templateSelection可以考虑项目的许多属性来生成渲染输出.

您只能在<option>元素中定义值和文本.您无法定义要设置为选定的实际对象(项目),以便templateSelection可以生成正确的输出.

有没有办法只使用select2的API来实现这个目标?

如果没有,是否还有其他解决方法可以通过正确呈现的代码中选择值templateSelection

jquery jquery-select2

5
推荐指数
2
解决办法
757
查看次数

处理跨聚合关系中的事件和聚合状态

我最近开始了我的第一次尝试,使用领域驱动设计原则结合事件溯源和 CQRS 来开发票务 Web 应用程序。

由于这是我第一次尝试脱离传统的 CRUD 方法,进入 DDD 世界,我确信我有很多东西设计错误,因为 DDD 需要付出很多努力来提出正确的域分离、有界上下文等。

在我的设计中,我有接受命令的命令处理程序,启动一个工作(一个工作单元),它们从聚合存储库(通过重放事件从事件存储加载聚合)加载所需的聚合,并操纵聚合通过每个聚合的公开操作,然后关闭作业。

聚合公开了实际发出事件的动作。例如,company.Create(firmName, address, taxid, ...) 发出一个CompanyCreated事件,并将其应用于自身。当 Job 即将完成时,来自该 Job 上下文中加载的所有聚合的所有事件都被事件存储收集并持久化。

现在,我遇到了一种情况,我确信这种情况很常见,在那里我有聚合之间的关系。例如 a Customerhas Contacts,或者 aSupportAgent是a的成员Department。这些是我设计中的聚合。

让我们Department举个例子。ADepartment的状态由标题、描述、一些其他属性以及作为SupportAgent该部门成员的代理的id列表组成。ASupportAgent的状态由姓名、姓氏、电话号码、电子邮件等组成,以及Department该代理所属部门的ID列表。

现在,当AddAgentToDepartment(agentId, departmentId)处理类型为Command 时,会发出两个事件。一个DepartmentAdded是发出将增加部门ID为座席的状态相应的代理,并且SupportAgentAdded发出了相应的部门,将增加代理ID进入部门的状态。

我的第一个问题是:将相关聚合的 id 保持在聚合状态是否正确?“正确”是指这是最佳实践吗?或者还有另一种方式(例如,在一种“部门成员管理器”实体/聚合或其他东西中保持关系。实际上这个实体或任何东西在这里是一种单例。在 DDD 世界中是否有这样的东西)?

我的另一个想法是关于事件重播。在前面的示例中,发出了两个事件,但为了更新视图,只需要处理其中一个,因为这两个事件描述了系统状态中完全相同的转换(代理和部门链接)。我选择只处理SupportAgentAdded事件来更新视图。我的事件处理程序执行一个 SQL 脚本来更新相应的数据库表以反映系统的当前状态。

如果我们需要重放某些事件以仅使某个聚合的视图处于一致状态,会发生什么?具体来说,当我想为支持代理重播事件时,只会重播事件DepartmentAdded,并且这些事件不会被任何人处理,因此不会更新视图。为了使整个系统进入一致状态,部分重放某些事件还是应该重放事件存储中的所有事件是否正确

如果你是 DDD 和 ES 专家,或者至少你有经验,我想得到一些提示,你可能会看到我在做什么或思考什么,错了,我应该看什么方向。

domain-driven-design aggregate aggregateroot cqrs event-sourcing

4
推荐指数
1
解决办法
1709
查看次数

定义 CreateProjection 和 CreateMap

在我的项目中,我使用实体框架进行 ORM,使用 Dto 类进行 api 响应。我使用 Automapper 在两者之间进行映射。

当我需要直接从 EF 可查询中获取 Dtos 时,我对ProjectTo<>查询进行了最终操作,一切都很好。

但很多时候,我有一个来自实体框架的已物化对象,我需要将其映射到其 Dto 等效项。在本例中,我使用Map<>而不是ProjectTo<>因为内存中有一个实例,而不是转换为 SQL 的 IQueryable。

当我创建 Automapper 配置文件时,我已经注册了投影和地图,如下所示:

CreateMap<UserSession, Models.UserSession>(); // used when mapping between instances
CreateProjection<UserSession, Models.UserSession>(); // used when mapping on EF LINQ expressions
Run Code Online (Sandbox Code Playgroud)

这应该足以让 Automapper 理解,当我使用 ProjectTo 时,我想要投影映射,当我使用 Map 时,我想要实例映射。

但是,相反,当我有一个物化UserSession对象(在实体框架中注册的类型),并且想要将其映射到一个Models.UserSession对象(我的 Dto)时,我会得到此响应。

CreateProjection works with ProjectTo, not with Map.
Run Code Online (Sandbox Code Playgroud)

那么,如何在 Automapper 中注册相同类型的地图和投影呢?

c# automapper .net-6.0

4
推荐指数
1
解决办法
2088
查看次数

安装和部署项目中系统驱动器的默认位置

我在Visual Studio 2010中有一个安装和部署项目

Application Folder的默认位置设置为C:\ [Appname]

问题是,如果没有驱动器C:在机器中正在安装应用程序,安装程序将崩溃并显示错误" 'xxxxxxxx'不是有效的文件名 "或类似的东西,因为安装程序会验证之前的位置用户有机会设置实际的应用程序安装文件夹.(因此默认位置已经过验证,并且由于驱动器c:缺失,因此会抛出此错误)

您可以将位置设置为[ProgramFilesFolder]\[AppName]等.

我想知道系统的Windows驱动器的"宏"是什么!我会期待类似[WindowsDrive][SystemDrive]之类的东西,以便我可以将默认位置设置为[SystemDrive]\[Appname],例如!

有人知道吗?

installation setup-project visual-studio-2010 setup-deployment visual-studio

3
推荐指数
1
解决办法
6743
查看次数

MSBuild条件IsDebug

如何确定是否在MSBuild .targets文件中以调试(或发布)模式构建项目,并将此信息用作另一个属性的条件?

就像是:

<OutDir Condition="IsDebug">bin\Debug\$(SomeOtherProperty)\</OutDir>
<OutDir Condition="!IsDebug">bin\Release\$(SomeOtherProperty)\</OutDir>
Run Code Online (Sandbox Code Playgroud)

是否有诸如“调试/发布”模式之类的东西,或者它们仅仅是不同配置属性值集的常规名称

.net msbuild msbuild-task visual-studio-2010 targets

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