小编Ale*_*lex的帖子

在签署EXE时,"文件具有与清单中指定的计算哈希值不同"错误

我的ClickOnce安装失败并显示错误:

File,WindowsFormsProject.exe具有与manifest中指定的不同的计算哈希值.

我使用MSBuild生成ClickOnce部署包.构建脚本中的相关行:

<MSBuild Targets="Publish"
         Projects="WindowsFormsProject.csproj"
         ContinueOnError="false" />
Run Code Online (Sandbox Code Playgroud)

WindowsFormsProject.csproj具有签署可执行文件的Post-Build步骤,如下所示:

signtool sign /a $(ProjectDir)\obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)
Run Code Online (Sandbox Code Playgroud)

麻烦的是,当我查看构建日志时,我发现清单是在Post-Build事件执行之前生成的.因此哈希码不匹配就不足为奇了.构建日志中的相关行:

_CopyManifestFiles:

WindowsFormsProject - > ...\WindowsFormsProject.application

...

PostBuildEvent:

成功签名:...\WindowsFormsProject.exe

所以,问题是:

  1. 有没有办法在<MSBuild>任务期间生成清单之前签署程序集?
  2. 有没有办法在构建完成后重新生成清单(和仅清单),以便哈希代码再次匹配?

或者,如果你能想到问题的不同解决方案,我会很感激你的想法.

c# msbuild clickonce msbuild-task

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

PHP 在异常堆栈跟踪中切断了部分长参数。如何告诉它不要?

以下是 PHP 7 运行时错误消息的示例:

PHP 致命错误:未捕获的错误:在 predis.php:4168 中找不到类“Predis\Connection\ConnectionException”

堆栈跟踪:

#0 /var/www/api/libraries/predis/predis.php(4455): Predis\Connection\AbstractConnection->onConnectionError('Error while rea...')

请注意标记为 #0 的第一个堆栈跟踪行中的省略号:

('错误而重新...')

如果没有被切断,最重要的信息就会在那里。其他错误消息也有同样的问题,通常会切断消息中非常有价值的部分。

是否有设置可用于在堆栈跟踪中打印更多信息?我们使用的 PHP 的确切版本是 7.1.1。

更新我们遇到的确切问题在如何禁用 PHP 在异常堆栈跟踪中切断部分长参数中描述?. 这个问题可以关闭一个骗局。这个想法是捕获异常,调用 Exception::getTrace() 并手动构造错误消息。异常可以在全局处理程序中或在每个 try/catch 块中捕获。Exception::getTraceAsString 的默认实现会截断长函数参数。

php error-handling

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

一个Transanction中的多个NHibernate会话

我需要在一个事务中登记几个NHibernate会话.目前我做以下事情:

1)创建SQL连接,dbConn;

2)调用ISession session = ISessionFactory.OpenSession(dbConn)来创建第一个会话;

3)调用session.BeginTransaction()开始一个事务.

4)稍后在代码中,我创建一个具有相同连接的新会话:

ISession session2 = ISessionFactory.OpenSession(dbConn)

当我尝试对session2运行任何查询时,我收到以下错误消息:

当分配给命令的连接处于挂起的本地事务中时,ExecuteReader要求该命令具有事务.该命令的Transaction属性尚未初始化.

NHibernate似乎没有在开放事务中登记第二个ISession(或者更具体地说,它为该会话创建的Command对象),即使它确实重用了相同的连接.

有没有办法在同一个交易中拥有多个会话?

我不能使用单个会话,因为我有一个长期运行的任务,加载并创建超过100万个对象.如果我使用一个ISession,由于NHibernate Flushes的性能下降,性能会从每秒3000个数据库请求降低到20个.为了解决这个问题,我想创建短期会话并快速处理它们.

但是,整个过程都包含在一个事务中.如果我使用自己的连接创建独立的后续会话,它们会碰撞第一个事务所持有的表锁并冻结.为了解决这个问题,我需要在同一个事务中运行这些会话.

.net sql nhibernate

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

AS3:两个具有相同名称但来自两个接口的不兼容签名的函数

我有两个接口声明具有相同名称但不兼容的签名的函数:

interface IDog 
{
    function bark() : void;
}

interface IAdvancedDog
{
    function bark(volume : Number) : void;
}
Run Code Online (Sandbox Code Playgroud)

我需要在同一个类中实现它们,如下所示:

class AlphaDog implements IDog, IAdvancedDog
{
     public function bark() : void
     {
     }

     public function bark(volume : Number) : void
     {
     }
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用.在这种情况下,有没有办法消除bark()函数的歧义?例如,C#允许显式接口标记:

   class AlphaDog : IDog, IAdvancedDog
   {
       // ...
       void IDog.bark() { } 
   }
Run Code Online (Sandbox Code Playgroud)

虽然由于函数重载规则,C#中不需要这样做.AS3中没有超载,有没有其他方法可以解决这个问题?

UPDATE.

1)在课堂定义中缺少'公共'限定符是一个错字.我修好了它.

2)我错过了一个额外的要求,即不能修改接口(为了这个问题的目的).在实际项目中,它们被定义在两个不同的库中,这些库是大型项目的一部分.多个类实现两个接口(单独).因此,接口的任何更改都需要对所有这些类进行级联更新,重新编译,测试等.因此,我想首先找出是否存在没有这种侵入式修改的解决方案.它似乎没有.

actionscript actionscript-3

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