我的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
所以,问题是:
或者,如果你能想到问题的不同解决方案,我会很感激你的想法.
以下是 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 的默认实现会截断长函数参数。
我需要在一个事务中登记几个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个.为了解决这个问题,我想创建短期会话并快速处理它们.
但是,整个过程都包含在一个事务中.如果我使用自己的连接创建独立的后续会话,它们会碰撞第一个事务所持有的表锁并冻结.为了解决这个问题,我需要在同一个事务中运行这些会话.
我有两个接口声明具有相同名称但不兼容的签名的函数:
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)我错过了一个额外的要求,即不能修改接口(为了这个问题的目的).在实际项目中,它们被定义在两个不同的库中,这些库是大型项目的一部分.多个类实现两个接口(单独).因此,接口的任何更改都需要对所有这些类进行级联更新,重新编译,测试等.因此,我想首先找出是否存在没有这种侵入式修改的解决方案.它似乎没有.
.net ×1
actionscript ×1
c# ×1
clickonce ×1
msbuild ×1
msbuild-task ×1
nhibernate ×1
php ×1
sql ×1