我有一个运行脚本任务的SSIS包(主要是和其他一些东西).脚本任务使用OleDB连接连接到Access数据库.这是Microsoft Jet 4.0连接.我安装了驱动程序.但它不会通过代理帐户在SQL Agent中运行.它可以直接从Visual Studio和包存储中运行.事实上,当我以代理所附带的特殊帐户登录时,它在这两个地方都运行良好.但是,当我通过SQL Server代理运行时,我得到了可怕的"未指定错误"OleDbException.
脚本任务的相关代码:
// class field
private string accessConnectionStringTemplate = "Data Source=\"{0}\";Provider=Microsoft.Jet.OLEDB.4.0;";
// in method that connects to database
Print(file, "Connection string: " + string.Format(accessConnectionStringTemplate, file.FileName));
// outputs: Data Source = "\Path\To\File";Provider=Microsoft.Jet.OLEDB.4.0"
using(access = new OleDbConnection(string.Format(accessConnectionStringTemplate, file.FileName))) {
access.Open();
// other code
}
Run Code Online (Sandbox Code Playgroud)
通过SQL代理作业历史记录的错误消息:
Started: 12:35:10 PM
Error: 2016-11-03 12:35:33.51
Code: 0x00000000
Source: Import Files Main
Description: Exception: Unspecified error
End Error
Error: 2016-11-03 12:35:33.51
Code: 0x00000000
Source: Import Files Main
Description: at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection …Run Code Online (Sandbox Code Playgroud) 我在每个E&N中有三个表面属性(东向,北向和深度).
我想在这些点上拟合曲面,然后在每个dx,dy和dz中计算该拟合曲面的体积,然后将其与其他一些数据进行比较.
你能帮帮我吗?
我目前只有一个解决方案,包含目前为止开发的一个应用程序和所有本地库的项目.整个解决方案也保存在一个Git仓库中.我现在要开发第二个将使用相同库的应用程序.该应用程序将具有与第一个和不同版本不同的发布周期.我的问题是如何分解代码,无论是在解决方案设置方面还是在Git方面.
在谈论答案之前,还有一些其他有用的细节:
我一直在脑子里想着几个想法,但似乎没有一个想法令人满意.我考虑过只保留一个解决方案/一个Git仓库.我还考虑过使用子模块将解决方案分成几个Git repos,但子模块很麻烦.我还想过让每个应用程序都有自己的解决方案和所有库.那么问题是我是否可以在visual studio中打开多个解决方案.库经常需要随应用程序一起更改,因此在单独的解决方案或Git repos中将它们分开太多会使库和应用程序保持同步变得困难.我所关心的另一个问题是分支.如果我将解决方案拆分为几个Git存储库,我可以为每个应用程序分支,但如果我保留一个Git存储库,
我甚至可能不会向自己提出正确的问题,也有可能我只是有一个心理障碍阻止我解决一个简单的解决方案.无论哪种方式,我都会向SO社区提出一些想法.我希望一切都清楚,但如果没有,我会很高兴澄清.
c# git project-management projects-and-solutions visual-studio
我只使用基本的Spectron测试文件(在Typescript中)打开我的应用程序,获取窗口计数,并可能退出.然而,Spectron app.stop()似乎只关闭开发工具窗口并使主窗口运行.我已经四处搜索并遇到了一些与此问题有关的GitHub问题.最好的人似乎提供的是使用pkill.我不想这样做,因为它可能会杀死更多(例如在CI服务器上).
在我展示所有代码之前,我的问题是,我需要做些什么才能让Spectron的会话在测试后真正退出?
这是我spec.ts的测试:
import { Application } from "spectron";
import * as assert from "assert";
import * as electronPath from "electron";
import * as path from "path";
describe('Application launch', function () {
this.timeout(10000);
beforeEach(function () {
this.app = new Application({
path: electronPath,
args: [path.join(__dirname, '..')]
} as any);
return this.app.start();
})
afterEach(function () {
if (this.app && this.app.isRunning()) {
// TODO: figure out way to close all windows
return this.app.electron.app.quit();
}
});
it('shows an …Run Code Online (Sandbox Code Playgroud) 我有定制的向导系统,到目前为止一直很合适.对于大多数向导,页面可以以相当通用的方式构造,因此只有一个类实现这些类型的页面.但是,有些需要自定义设计,因此这些类型的页面有一个抽象基类.由于VS设计器存在一些缺陷,页面本身不能是UI控件,也不是具有通用参数的抽象类(存在用于流畅编程的那些).因此,我遵循的一个选项是跨两个类实现页面,一个用于UI(源自UserControl并且可以设计),一个用于页面.该页面包含UI控件的一个实例,并将其嵌入其中以供显示.不是最佳的,但它的工作原理.
现在,这个设置出现了一个问题:UI控件类和页面类之间存在紧密耦合.这通常不会是一个大问题,除了可以从页面创建页面的专用版本.因此派生的控件和页面类也与它们紧密耦合.所以当我有控件和页面类的成员变量,属性和方法分别为控件或页面类型键入时(即控件类将具有属性)Page它指向控件嵌入的页面),我们遇到派生类的一个大问题.每个派生类必须以某种方式更改这些成员的类型.我曾经想过要做的是包括一个泛型类型参数,允许这些成员通常输入:
public class BaseControl<TControl, TPage>
where TPage : BasePage<TPage, TControl>
where TControl : BaseControl<TControl, TPage> {
public TPage Page { get { ... } set { ... } }
...
}
public class BasePage<TPage, TControl>
where TPage : BasePage<TPage, TControl>
where TControl : BaseControl<TControl, TPage> {
public TControl Control { get { ... } set { ... }
...
}
public class DerivedControl<TControl, TPage> : BaseControl<TControl, TPage>
where TControl : DerivedControl<TControl, TPage>
where TPage : …Run Code Online (Sandbox Code Playgroud) 假设我们有一个代表销售办事处的维度.办公室可能会移动,这将是第二类变更.我们希望跟踪旧办公地点发生的操作,以及现在在新办公室发生的操作,并了解发生的变化.到目前为止,只是标准的II型设计.现在让我们说办公室与另一个办公室合并.也就是说,两个最初不同的办事处("母公司")的业务活动现在正在一个办公室("合并办公室")进行,这可能是任何一个办公室的延续(实际或工作人员)原来的办公室,或者它可能是一个新的办公室,从商业的角度来看,是前两个办公室的延续.
报告/分析要求如下:
我不确定如何使用任何SCD类型对此进行建模.如果我们只是用一个新的office条目替换两个父office条目,并相应地更新所有的事实表,我们就会改变一个类型.这让我们看到当前的活动就好了,但我们失去了历史.如果我们将记录分开,我们将不知道合并.如果我们添加第三条记录来代表合并的办公室,我们也会丢失历史记录(它有哪些自然密钥?父办公室的自然密钥都不合适).
我是否需要使用桥接/多对多表?这引入了我想避免的复杂性.但是,如果这是最好的方法,那就这样吧.但是,我仍然不确定如何构建它.事实表可能指向办公室入口,办公室将以多对多的方式分组.报告将基于群体进行,而不是直接在办公室维度进行.
ElectricLlama的问题解答
情况:我想显示记录消息的代码的方法和行号.问题是我有一个调用log4net记录器的中间类.不幸的是,由于现有的架构问题,我无法取消这个中级课程.结果是我总是将方法和行号看作是在中间类中.不是我想要的.
所以我尝试创建一个自定义的PatternLayoutConverter,根据这个问题:
我也是以编程方式配置log4net,因为再次出于体系结构的原因,使用XML配置文件是不可行的(我也觉得配置log4net的首选和唯一记录的方法是通过一个愚蠢的XML文件,这是另一个主题,这是荒谬的讨论).所以我跟着这个帖子.
除了从不调用我的自定义转换器外,一切正常.以下是自定义转换器的代码:
public class TVPatternLayout : PatternLayout {
public TVPatternLayout() {
this.AddConverter("logsite", typeof(TVPatternLayoutConverter));
}
}
public class TVPatternLayoutConverter : PatternLayoutConverter {
protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) {
StackTrace st = new StackTrace();
int idx = 1;
while(st.GetFrame(idx).GetMethod().DeclaringType.Assembly == typeof(LogManager).Assembly)
idx++;
writer.Write(String.Format("{0}.{1} (line {2})", st.GetFrame(idx).GetMethod().DeclaringType.Name, st.GetFrame(idx).GetMethod().Name,
st.GetFrame(idx).GetFileLineNumber()));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我配置记录器的代码:
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;
RollingFileAppender appender = new RollingFileAppender();
appender.Name = loggerName;
appender.File = realPath;
appender.AppendToFile = true;
appender.MaximumFileSize = "8000";
appender.MaxSizeRollBackups …Run Code Online (Sandbox Code Playgroud) 我navigator.mediaDevices.getUserMedia()在 Linux 上的 Chrome 80 上使用。为了获得最高质量,我运行了一系列约束,检查错误,或检查实际上不是所需大小的流。至少对于我的一台相机,它经常只能获得 640x480 的尺寸,而不是它能够达到的 1280x720。如果我调用getUserMedia()不同的设备,然后返回并为原始设备调用它,它通常(但并非总是)会获得 1280x720 版本。我不确定如何强制 Chrome 使用正确的尺寸。
这些是我让它使用的约束(按顺序):
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920,"ideal":1920,"max":1920},"height":{"min":1080,"ideal":1080,"max":1080}}}
// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"ideal":1920},"height":{"ideal":1080}}}
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920},"height":{"min":1080}}}
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"exact":1920},"height":{"exact":1080}}}
// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":1920,"height":1080}}
Run Code Online (Sandbox Code Playgroud)
然后是 1600x1200、1280x720、800x600 和 640x480 的相同模式。最后一个最终成功,因为它匹配从getUserMedia().
这在 Firefox 上运行良好。它适用于某些设备。如果我在第一个设备加载了低尺寸后选择了不同的设备,它有时会起作用。
事实上,有问题的OverconstrainedError约束deviceId有点令人担忧,但根据我读过的内容,它只返回第一个约束,不一定是失败的约束。无论如何,当其他变体没有失败时,很难看出设备 ID 如何导致它失败。
我需要做什么才能完成这项工作?
当TabPage.Hide()没有任何效果时,为什么仍然可用? .tcImgBase.TabPages [ "tabPage3"]隐藏();
隐藏标签页的一般实现是删除它.有人可以解释隐藏和显示的范围吗?