小编Ami*_*rge的帖子

使用C#SMTP API时如何从SES获得响应

.Net SmtpClient的Send方法返回void.它只抛出两个异常,SmtpExceptionFailureToSendToRecipientsException(或类似的东西).

使用SES时,为了成功发送电子邮件,SES会发回带有消息ID的200 OK消息.需要跟踪此消息ID.

如何使用C#SMTP api执行此操作?

编辑:SMTP协议提到SMTP服务器发送的各种响应代码.我正在寻找一个SMTP库,向调用者公开"最终"响应代码.我已经知道SES HTTP API了.我暂时不打算使用它.

c# smtp amazon-web-services amazon-ses

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

Wix中的C#自定义操作

卸载我的应用程序时,需要通知服务器,以便它可以释放分配给客户端的许可证密钥.这是通过Web服务调用完成的.

我创建了一个C#自定义动作来执行此操作.问题是,卸载程序正在退出,说它无法找到一个DLL.

msi的错误日志包含以下错误:

错误1723.此Windows Installer程序包存在问题.无法运行此安装所需的DLL.请联系您的支持人员或包装供应商.Action ReadLicenseKeyFromFile,entry:ReadLicenseKey,library:C:\ Windows\Installer\MSI4F42.tmp

我将函数ReadLicenseKey标记为自定义操作.自定义操作名为ReadLicenseKeyFromFile.

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize">
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE
</Custom>

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" />

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" />
Run Code Online (Sandbox Code Playgroud)

自定义操作项目正在输出.CA.dll文件.我已经尝试安装文件作为设置的一部分,手动复制粘贴文件,没有对文件做任何事情......基本上尝试了所有可能的组合.

必须有一些我缺少的东西,所以请帮助.

c# custom-action wix wix3

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

Xml配置还是通过代码配置?

我个人喜欢从C#代码配置StructureMap的选项.根据我的理解,DI的优点之一是我们可以轻松交换新的具体实例.但是,如果配置是在代码中定义的,那么具体实例在dll中是硬编码的.

所以,实际上,它与硬件编码依赖关系一样好,对吧?我知道,在测试过程中它会让生活更轻松......

我的观点是,使用xml配置不是更好吗?你想插入一个新的具体实例?只需让安装程序用新的文件覆盖structuremap.config文件.

那么,配置StructureMap的首选方法是什么?

额外:我暂时被迫使用C#配置,因为我不知道如何将连接字符串传递给实例.我可以在配置文件中编写连接字符串,但我想重用app.config中定义的连接字符串.

structuremap dependency-injection inversion-of-control

10
推荐指数
2
解决办法
2535
查看次数

调用相同对象的多个线程同时起作用.它会引起问题吗?

假设我有以下C#类

class MyClass
{
    private int _i;
    private object _locker = new object();

    public void DoSomething()
    {
        var b = 2;

        // some work that depends on b being 2

        lock(_locker)
        {
            _i = 3;
        }

        // some more work

        b = -1;

        // some more work
    }
}
Run Code Online (Sandbox Code Playgroud)

我用这种方式,

//Usage:

var myobject = new MyClass();
new Thread(new ThreadStart(() => myobject.DoSomething())).Start();
new Thread(new ThreadStart(() => myobject.DoSomething())).Start();
Run Code Online (Sandbox Code Playgroud)

以下序列可以发生吗?

Thread 1 is halfway through its work.
Thread 2 just starts. Sets b …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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

仅在满足特定条件时才设置Wix属性

我想做的是:

<Property Id="LICENSEKEYPATH">
      REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE
      <DirectorySearch Id="ProgramDataSearch" AssignToProperty="yes" Depth="4" Path="[#ProductDirInAppData]">
        <FileSearch Id="LicenseFileSearch" Name="lic-conf.enp"/>
      </DirectorySearch>
</Property>
Run Code Online (Sandbox Code Playgroud)

当我的应用程序被卸载时,只有这样,我是否要搜索许可证文件并获取其路径.目前,虽然代码没有给出任何错误,但即使我正在安装文件,它仍然会搜索许可证文件路径.因此,设置会延迟很长时间.更重要的是,wix设置在第一个屏幕中显示其搜索此属性的效果,然后继续其他屏幕.

那么,如何仅在卸载期间搜索文件或设置属性的值?

installation wix wix3

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

什么是mongodb日志中的"锁(微)w:16035"和"锁(微)r:10051"

我在MongoDb配置文件中启用了分析.

profile=2
slowms=5
Run Code Online (Sandbox Code Playgroud)

mongodb日志包含花费超过5毫秒的所有查询(很奇怪,我认为profile = 2意味着记录所有查询).

对于所有update条目,行结束locks(micros) w:17738 17ms(实际数字变化).对于所有query条目,该行包含locks(micros) r:15208

样品线

Tue Dec 03 02:29:43.084 [conn11] update DbName.CollectionName query: { _id: ObjectId('51dfd2791bbdbe0b44395553')} update: { json for new document } nscanned:1 nmoved:1 nupdated:1 keyUpdates:0 locks(micros) w:17738 17ms
Run Code Online (Sandbox Code Playgroud)

阅读文档,我发现以下部分,

system.profile.lockStats

New in version 2.2.

The time in microseconds the operation spent acquiring and holding locks. This field reports data for the following lock types:

    R - global read lock
    W - global write …
Run Code Online (Sandbox Code Playgroud)

mongodb

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

clojure 是否具有 C# 等效的 yield?

我正在阅读电子书《Scala 和 Clojure 中的函数式编程模式》,并找到了导致此问题的代码示例。

这段代码旨在比较两个 Person 对象。比较算法是 - 首先比较它们的 FName,如果相等则比较它们的 LName,如果相等则比较它们的 MName。

书中给出的 Clojure 代码(或多或少)

(def person1 {:fname "John" :mname "Q" :lname "Doe"})
(def person2 {:fname "Jane" :mname "P" :lname "Doe"})

(defn fname-compare [p1 p2] 
  (do 
    (println "Comparing fname")
    (compare (:fname p1) (:fname p2))))

(defn lname-compare [p1 p2] 
  (do 
    (println "Comparing lname")
    (compare (:lname p1) (:lname p2))))

(defn mname-compare [p1 p2] 
  (do 
    (println "Comparing mname")
    (compare (:mname p1) (:mname p2))))

(defn make-composed-comparison [& comparisons] 
  (fn [p1 p2]
    (let …
Run Code Online (Sandbox Code Playgroud)

clojure

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

如果没有使用它们,则无法使树抖动React和依赖项

我无法使用死代码来消除未使用的React组件.

我在这里创建了一个示例项目 - https://github.com/amithgeorge/webpack-issue-demo-1 ...

定义了三个类,

  • class A 是使用道具类型的反应组件,
  • class B是与redux连接的反应组件,使用connect HOC,
  • class C 是一个简单的类而不是反应组件 -

代码 - https://github.com/amithgeorge/webpack-issue-demo-1/blob/5643302db776263db857259cc00c2bafe46acb8c/src/classes.js ....

在条目文件中,我只导入C类并使用它 - https://github.com/amithgeorge/webpack-issue-demo-1/blob/5643302db776263db857259cc00c2bafe46acb8c/src/index.js

我希望输出文件只包含C类,但它拥有一切!

https://github.com/amithgeorge/webpack-issue-demo-1/blob/5643302db776263db857259cc00c2bafe46acb8c/dist/main.js

如果我删除propTypes并删除connect,则ClassA和ClassB的代码不存在.但输出仍然包含React,PropTypes和React-Redux的完整代码.如果没有使用这些,我如何让webpack删除它们.

webpack tree-shaking

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

NHibernate.TypeMismatchException:提供错误类型的id.预期:System.Int32,得到System.Int64

我使用以下查询来获取客户端.客户端的公共ID类型为long.

var client = Session.CreateQuery("from Client as c where c.Id = :Id").SetParameter("Id", 1, NHibernateUtil.Int64).UniqueResult<Client>();
Run Code Online (Sandbox Code Playgroud)

得到错误:

NHibernate.TypeMismatchException:提供错误类型的id.预期:System.Int32,得到System.Int64

同时,以下工作正常.

var client = Session.Get<Client>(1L); //Or
var client = Session.CreateCriteria<Client>().Add(Restrictions.Eq("Id", 1L)).UniqueResult<Client>();
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我使用流利的nhibernate来创建映射.我已经针对Sqlite和MySql数据库测试了查询.结果相同.

Edit1:映射生成的模式显然是使用bigint作为mysql上的主键.这就是为什么我无法理解对Int32的期望?

Edit2:好的,我的Client类有一个Report对象的引用.它实际上是db中的一对一关系,报告表具有列clientID.Report类的id为int类型.一旦我将其类型更改为long,错误就消失了.

我的映射如下:

ClientMap:

HasOne<Report>(x => x.Report)
   .PropertyRef(x => x.Client)
   .LazyLoad()
   .Cascade.SaveUpdate();
Run Code Online (Sandbox Code Playgroud)

ReportMap:

References(x => x.Client, "clientID").Unique();
Run Code Online (Sandbox Code Playgroud)

那么,为什么问题通过将reportid的类型从int更改为long来解决.其次,为什么在我没有要求时,它甚至还在费心去取报告呢?

nhibernate nhibernate-mapping

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

如果两个文件的公钥相同,是否足以断定它们是由同一个证书签名的?

我正在为我的软件实现自动更新机制.服务器上的msi使用signtool进行签名.我的应用程序下载msi并读取下载的msi的公钥.如果公钥与源代码中硬编码的公钥匹配,则它将执行msi并自行更新.

这是否足以确保不会错误地执行恶意msi?我的理解是,如果我的证书签名,文件将只有相同的公钥.

编辑: 在petey的帮助下,我能够检测到msi是否由我的证书签名.但是,这并没有解决我的问题.我仍然可以使用像Orca这样的工具编辑已签名的msi.即使msi不再与签名的msi相同,证书也没有任何变化.因此,当我检查msi是否由我签名时,我得到了.虽然我明白这可能是预期的行为,但必须有一些方法来检测msi是否被篡改?

security cryptography public-key-encryption x509certificate public-key

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

同时执行4个任务,每个任务完成时自动启动另一个任务

我有100个网址列表.我需要获取这些网址的html内容.假设我不使用异步版本,DownloadString而是执行以下操作.

var task1 = SyTask.Factory.StartNew(() => new WebClient().DownloadString("url1"));
Run Code Online (Sandbox Code Playgroud)

我想要实现的是一次获取最多4个URL的html字符串.

我为前四个网址启动了4个任务.假设第二个网址完成,我想立即启动第五个网址的第5个任务.等等.这种方式最多只能下载4个网址,并且出于所有目的,总会有4个网址被下载,即直到所有100个网址都被处理完毕.

我似乎无法想象我将如何实现这一目标.这样做必须有既定的模式.思考?

编辑:

关注@ Damien_The_Unbeliever的评论使用Parallel.ForEach,我写了以下内容

var urls = new List<string>();
var results = new Dictionary<string, string>();
var lockObj = new object();
Parallel.ForEach(urls,
                 new ParallelOptions { MaxDegreeOfParallelism = 4 },
                 url =>
                 {
                     var str = new WebClient().DownloadString(url);
                     lock (lockObj)
                     {
                         results[url] = str;
                     }
                 });
Run Code Online (Sandbox Code Playgroud)

我认为上述内容比创建单个任务和使用信号量限制并发更好.那说从未使用或使用过Parallel.ForEach,我不确定这是否正确地做了我需要做的事情.

c# async-await

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

来自powershell函数内部的外部命令的流输出

考虑以下命令:

7z.exe a -t7z folder.7z folder
Run Code Online (Sandbox Code Playgroud)

我有以下两个精简的 powershell 脚本

文件 1:common.ps1

function Archive-Folder ($src, $dest_path, $archive_name) {

    $script_dir = split-path $script:MyInvocation.MyCommand.Path

    if ((test-path $src) -eq $false) {
        write-error "$src is not a valid source directory"
        #return
        return $false
    }

    if ((test-path $dest_path) -eq $false) {
        write-error "$dest_path is not a valid destination directory"
        #return
        return $false
    }

    if ([string]::IsNullOrWhiteSpace($archive_name) -eq $true) {
        write-error "$archive_name is not a valid archive name"
        #return
        return $false
    }

    write-verbose "archiving the folder"

    $archive_command = …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-3.0

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