我使用Visual Studio安装项目为我的.Net应用程序创建MSI.如果我可以自动增加版本号,那就太好了.更好的方法是将安装程序版本设置为等于主输出exe的AssemblyVersion.
我们在三个应用程序中使用了一个对象模型.两个程序收集数据,另一个程序读取数据并生成报告.系统非常断开连接,因此我们不能让所有程序都与单个数据库通信.
现在,程序只使用公共库来填充对象模型并序列化/反序列化到磁盘.具体来说,我们正在使用XML序列化.
这个模型有几个问题.1)XML可能被认为是浪费.文件可能变得庞大而且难以处理.老实说,文件大小现在不是一个大问题.2)我最关心的是记忆足印.将整个文件加载到对象模型中,对其进行操作,然后保存.
希望我已经表达了我的担心,在某些时候,我们将在运行时遇到此应用程序的内存问题.足够的数据将被收集到一个"数据库"(xml文件)中,无法一次性加载到内存中.
我想要的是访问由文件存储而不是内存支持的对象模型.我希望对象模型的更改最小化.访问对象时,它来自磁盘,当它被设置时,它被保存(如果可能的话,自动保存).
我们已经使用SQLite,SQL Compact 4.0和EF 4以及LINQ to XML(简要地)研究了NHibernate.我过去也使用db4o将对象缓存到磁盘,但这是一个不相关的项目.
在我潜入并花时间学习其中一个之前,我想知道我的想法是否有意义.我是否可以拥有一个"神奇地"缓存到存储介质的对象模型,而不是无限地膨胀我的内存占用?即使它不是最优雅的,最简单的方法是什么?
还有其他技术可以帮助我吗?内存映射文件,linq-to-sql,Lazy(T)(仅用于在需要时从文件中获取对象).
我意识到这是一个开放式的问题.我正在寻找一个大图片响应和细节,如果有人有真实的世界经验这样做.链接会有所帮助......
谢谢.
我正在学习创建Visual Studio Isolated Shell应用程序的教程.当我到第4步时,我得到一个包含以下文字的对话框:
创建子项目"VSShellStub1"时遇到问题.找不到指定的模板.请检查完整路径是否正确.
我在两台具有相同结果的独立机器上尝试过这个.两台计算机都安装了Visual Studio 2010 SDK和Isolated redistributable.有没有人见过/解决过这个问题?
下面是一个非常简单的例子.它在Mac OS X(Snow Leopard)上使用gcc编译得很好.在运行时它输出总线错误:10.这里发生了什么?
char* a = "abc";
a[0] = 'c';
Run Code Online (Sandbox Code Playgroud) 下面的示例显示了当您反映设置为对象(g)的接口{}和指向所述对象(h)的指针时发生的情况.这是设计,我应该期望我的数据类型丢失或者更确切地说,或者当我将指针放在接口{}中时,我无法获得数据类型的名称?
package main import "fmt" import "reflect" type Foo struct { Bar string } func main() { f := Foo{Bar: "FooBar"} typeName := reflect.TypeOf(f).Name() fmt.Printf("typeName %v\n", typeName) var g interface{} g = f typeName = reflect.TypeOf(g).Name() fmt.Printf("typeName %v\n", typeName) var h interface{} h = &f typeName = reflect.TypeOf(h).Name() fmt.Printf("typeName %v\n", typeName) }
输出:
typeName Foo typeName Foo typeName
同样在:
我在C#编译器中发现了奇怪的情况.为什么需要下面的演员?
using System;
class Program
{
private const byte BIT_ZERO_SET = 1;
private const byte BIT_ONE_SET = 2;
private const byte BIT_TWO_SET = 4;
static void Main(string[] args)
{
byte b = BIT_ZERO_SET | BIT_ONE_SET;
Console.WriteLine(b);
//Does not compile, says needs to cast to int.
//b = b | BIT_TWO_SET;
//Compiles...ugly
b = (byte)(b | BIT_TWO_SET);
Console.WriteLine(b);
Console.WriteLine("Press enter.");
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我在DockPanel中有一个简单的菜单.这是XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Name="file" Header="_File">
<MenuItem Name="exitMenuItem" Header="E_xit"/>
</MenuItem>
</Menu>
<Grid>
</Grid>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
为什么菜单会像大多数应用程序一样下拉到窗口边框的左侧而不是右侧?
在Python中,我可以通过以下方式定义类'foo':
class foo:
pass
Run Code Online (Sandbox Code Playgroud)
要么
class foo(object):
pass
Run Code Online (Sandbox Code Playgroud)
有什么不同?我试图使用函数issubclass(foo,object)来查看它是否为两个类定义返回True.它不是.
IDLE 2.6.3 >>> class foo: pass >>> issubclass(foo, object) False >>> class foo(object): pass >>> issubclass(foo, object) True
谢谢.
下面是一个简单的代码片段,演示了.Net正则表达式中行尾匹配("$")的看似错误的行为.我错过了一些明显的东西吗
string input = "Hello\nWorld\n";
string regex = @"^Hello\n^World\n"; //Match
//regex = @"^Hello\nWorld\n"; //Match
//regex = @"^Hello$"; //Match
//regex = @"^Hello$World$"; //No match!!!
//regex = @"^Hello$^World$"; //No match!!!
Match m = Regex.Match(input, regex, RegexOptions.Multiline | RegexOptions.CultureInvariant);
Console.WriteLine(m.Success);
Run Code Online (Sandbox Code Playgroud) 我试图使用MS的这个教程来验证我可以从我的系统上的命令行构建一个.cpp文件.我的VS命令提示符似乎有问题.它找不到cl.exe或所需的包含文件.我将C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\bin和C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE添加到我的路径,以便找到cl.exe.现在我的错误是:
test.cpp(1):致命错误C1034:iostream:没有包含路径集
VS命令提示符的重点不是为我设置所有这些环境变量吗?为什么不正确设置?