我的一位客户要求我们开发一个"VBA宏".然而,在2010年代,我仍然使用这种过时的语言似乎很奇怪,我正在考虑试图说服客户使用VSTO dev.但是,由于我是两个世界的新手,我需要帮助填写赞成/反对页面才能辩论这一点.
当然,答案不能没有实际要求,让我试着恢复:
目标:Word 2003/2007(但我怀疑2010年是一个尚未知的要求)编辑 2010年要求已确认
外部发布系统需要.doc文件作为输入.的.DOC文件必须应用的一些具体形式:"自定义首部1","自定义首部2"等
用户可以使用Word以两种可能的方式构建文档:
- 使用部署在计算机上的.dot文件启动新文档
- 转换任何现有文档以匹配目标模板
用户可以"简单地"(简单UI)"应用"样式:上下文菜单,样式菜单,自定义操作窗格等.
到现在为止,我看到以下优点/缺点:
VBA
VSTO
我有一堆业务类与autoproperties:
public class A {
public int Id { get; set; }
public string Title { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
由于应用程序不断发展,因此需要启用跟踪属性更改的新要求,以便仅向后备存储库发送已更改的数据.
为了达到这个目标,我必须将所有属性转换为字段+属性,如下所示:
public class A {
private int m_Id;
public int Id {
get { return m_Id; }
set {
if(m_Id != value){
SetChanged("Id");
m_Id = value;
}
}
}
private string m_Title;
public string Title
{
get { return m_Title; }
set {
if(m_Title != value){
SetChanged("Title");
m_Title = value;
}
}
}
protecte void SetChanged(string propertyName) {
// Not …Run Code Online (Sandbox Code Playgroud) 我计划构建一个相当大的应用程序(在并发用户/请求数量方面很大,而不是在功能方面)。
基本上,我将在某处提供服务,即等待命令执行它们,并在稍后确认完成。在发出确认消息之前,此服务将使用服务总线进行通信,从而使执行成为最终结果。
此服务的使用者可以是任何类型的应用程序(WPF、SL、...),但我的主要(也是第一个)客户端将是一个 asp.net MVC 应用程序 + WebApi (.Net 4.5) 或 MVC only (.Net 4.0) ) 与 ajax 控制器操作。
Web 应用程序将依靠 Ajax 调用来保持用户友好的响应式应用程序。
我对这种成熟的异步架构还很陌生,我有一些问题可以避免将来的头痛:
在实现细节/框架方面,我想我会使用:
asp.net-mvc asynchronous signalr message-bus asp.net-web-api
我有一个程序,必须使用复合键管理对象.这个关键,简单就是几个字符串.
我有以下代码:
public struct MyKey
{
public string Part1 { get; set;} // always set
public string Part2 { get; set;} // can be null
public MyKey(string part1, string part2) : this()
{
this.Part1 = part1;
this.Part2 = part2;
}
}
Run Code Online (Sandbox Code Playgroud)
这对于存储我的值是可以的.
现在我希望能够:
我猜测了很多事情(覆盖等于运算符,重写GetHashCode和Equals方法,实现IComparable等),但我不确定实现目标的必要步骤是什么,以及什么会导致开销.
thx提前
我对C#编程比较陌生(实际上是整个编程),但是我已经构建了一个应用程序来管理我工作的团队使用的服务器上的应用程序池.它完成了它应该做得很好的一切,但我遇到的唯一问题是将以前使用的配置保存到app.config文件中,这样用户就不必每次都手动将它们放入.就目前而言,我可以保存并从文件中加载(以及每组中我需要的所有字符串).
问题是我想在进行粗略检查之前查看组中是否存在Name字符串.app.config部分的示例:
<appSettings>
<add Name="RowName" MachineName="MS-02348" AppSrvName="AppServer" WebSrvName="AppNet"/>
<add Name="RowName2" MachineName="MS-68186" AppSrvName="AppServer2" WebSrvName="AppNet2"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
所以我目前正在做的加载值的方法是我有一个方法来检索appSettings/add节点并将它们抛出到列表中,然后将值设置为对象的属性.我这样做的原因是我可以有一个仅列出对象名称的下拉列表,然后当我在所选项目上调用方法时,其余信息都可用.
无论如何,我现在遇到的是我想确保如果名称已经存在于app.config中,我会提示用户写另一个名称而不是将其保存到数据库中.拥有两个具有相同"Name"值的子节点会对我的逻辑造成严重破坏.
我试过一个foreach循环遍历列表中的对象,但是不知道有多少个对象,我不知道一个简单的方法,它真的说它确实存在或不存在.我也尝试根据节点中列出的值来定位子节点,但似乎也失败了.我猜这部分是语法,但它似乎与方法列表定义它的方式相匹配.
有什么想法吗?
这可能是提出这个问题的错误地方.我花了很多精力设置thr sharepoint 2010 2层农场.我已经安装了sharepoint所需的sql server数据库,安装在不同的机器上.和另一台机器上的sharepoint.它花了大约6天,但最后我注意到我的计算机名称有"win43453-676"这样的东西.我的经理想要保持中央管理员PC的"CentralAdminMachine"的相关名称.如果我改变了机器的名称,我甚至无法打开中央管理站点.在配置数据库和所有....更改此名称是否有任何补救措施?
我试图在"HomeController"中加载MVC中的XML文档
我希望这个文档加载到/ Home /目录下的所有内容,所以我的类:
public HomeController()
{ }
Run Code Online (Sandbox Code Playgroud)
在这里我有我想要连接到XML的代码:
//Now set up the config xml read
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(HttpContext.Server.MapPath("~/Content/settings.xml"));
XmlNodeList settings = xmldoc.SelectNodes("/settings");
XmlNodeList defaults = xmldoc.GetElementsByTagName("default");
foreach (XmlNode node in defaults)
{
string def_WebPageName = node["WebPageName "].InnerText;
}
Run Code Online (Sandbox Code Playgroud)
XML的结构:
<settings>
<defaults>
<WebPageName>blah</WebPageName>
</defaults>
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到XML文件,不断收到"对象设置为空引用"错误
假设我有这个小HTML片段:
<div id="outer">
<div id="inner">
<div id="inner2">foo bar</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我也定义了这些样式:
#outer {
height:100px;
overflow:auto;
background-color:#EEE;
}
#inner {
height:100px;
background-color:#AAA;
}
#inner2 {
margin-top:5px;
}
Run Code Online (Sandbox Code Playgroud)
使用此设置,滚动条显示outerdiv:

为什么嵌套的内部div会导致出现此滚动条?
我可以通过删除margin-top规则删除滚动条,但这会导致副作用.
这是一个重现问题的jsfiddle:http://jsfiddle.net/stevebeauge/PTA85/
[编辑]:我的实际问题通过替换margin-top来解决padding-top,但我正在寻找解释,而不仅仅是解决方案.
假设我有这个脚本:
$data= @{
A = 1
C = 2
B = 3
}
foreach($key in $data.Keys){
$item = $data[$key]
Write-Host "$($key) : $($item)"
}
Run Code Online (Sandbox Code Playgroud)
输出是:
C : 2
B : 3
A : 1
Run Code Online (Sandbox Code Playgroud)
如您所见,输出与输入的顺序不同.
有没有办法保存我的字典中的顺序?
我的实际要求是按字典中提供的顺序执行一组命令.
作为旁注,我可以使用以下方法解决:
$data= @(
@{ Name="A"; Value=1 }
@{ Name="C"; Value=2 }
@{ Name="B"; Value=3 }
)
foreach($item in $data){
Write-Host "$($item.Name) : $($item.Value)"
}
Run Code Online (Sandbox Code Playgroud)
但语法有点复杂
我正在使用 pnpm 及其工作区功能来构建多个应用程序,这些应用程序共享私有库中的一些代码。
除了私有依赖项之外,我还引用了 npm 注册表中的一堆公共包。
这工作正常。
然而,公共参考有时会遇到一些错误,我想帮助解决。这需要在最终提交 PR 之前对项目进行分叉。
Pnpm 允许声明对 git 项目的依赖关系,但如何引用分叉库的本地克隆?
我想避免将任何代码推送到分叉项目,除非它已经在本地进行了测试。
因为我在 pnpm 工作区中工作,所以工作区本身就是一个完整的 git 存储库,这不允许我在工作区中使用 fork
c# ×4
asp.net-mvc ×2
xml ×2
asynchronous ×1
c#-4.0 ×1
css ×1
git ×1
message-bus ×1
ms-office ×1
node.js ×1
pnpm ×1
powershell ×1
razor ×1
refactoring ×1
signalr ×1
variables ×1
vba ×1
vsto ×1