你有一个静态媒体,一个CD,所以你不能改变它上面的任何文件.那么更新如何运作?我知道有代码运行并检查版本是否不正确,然后在需要时下载补丁,但该路径如何集成到游戏中?
是否有一些"更新检查"检查补丁文件并加载它们?如果是这种情况,他们如何设计代码,以便开发人员可以解决不可预见的问题?
基本上,我有这个代码:
DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\");
FileInfo[] files = dir.GetFiles("200810*");
Run Code Online (Sandbox Code Playgroud)
我希望它匹配任何以200810开头的文件.但是,它匹配的文件名为
20070618_00806.bak和20070817_00806.bak(星号不在文件名中,这是我可以包含下划线的唯一方法)
我在命令提示符下使用dir尝试了它,它也匹配这些文件.为什么?
编辑:
也许使用C:作为例子不是一件好事.我实际查询的目录是网络共享\\ MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806 \
如果检查短名称与它有关,20070817_00806.bak不会是200708~1.bak吗?那也不匹配
DiffMerge等应用程序如何检测文本文件中的差异,以及它们如何确定行何时是新的,而不仅仅是在与要检查的文件不同的行上?
这是一个相当容易实现的东西吗?是否已有图书馆这样做?
我正在尝试实施一种策略模式,允许我允许我对"帐户"应用一些"好处".在下面的代码中,我无法将我的接口实现添加到期望接口的字典中.我认为这是一种逆变问题,但感觉我应该能够做到这一点:
编辑:
既然答案似乎是不可能的,有关如何实现我的目标的任何建议吗?
void Main()
{
var provider = new BenefitStrategyProvider();
var freeBenefit = new FreeBenefit();
var strategy = provider.GetStrategy(freeBenefit);
strategy.ApplyBenefit(freeBenefit, new Account());
}
public class BenefitStrategyProvider
{
private Dictionary<Type, IBenefitStrategy<BenefitBase>> _strategies = new Dictionary<Type, IBenefitStrategy<BenefitBase>>();
public BenefitStrategyProvider()
{
/* Why can't I add this? */
_strategies.Add(typeof(FreeBenefit), new FreeBenefitStrategy());
}
public IBenefitStrategy<BenefitBase> GetStrategy(BenefitBase benefit)
{
return _strategies[benefit.GetType()];
}
}
public class Account {}
public abstract class BenefitBase
{
public string BenefitName {get;set;}
}
public class FreeBenefit : BenefitBase {}
public …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一组逐步添加更多功能的库.
例如,在我的解决方案中,我有一个Foo项目,它定义了一些基本功能集,一个额外的项目Foo.Web,用于特定于Web的实现以及Foo.Web.Tokens更具体的功能.Foo.Web.Tokens取决于Foo.Web哪个取决于Foo.
我正在尝试构建单独的nuget项目,因此用户只需要引用他们需要的依赖项.我正在使用GitVersionTask对程序集进行版本控制,因此在构建之后,它们都获得相同的版本号,并且在从项目构建时我使用替换令牌作为nuget,以便nuget包都具有相同的版本号.
我的问题是,当我尝试引用一个预发布版本Foo.Web或Foo.Web.Tokensnuget无法解决依赖Foo.例如,如果我1.1.0.0-alhpa0001为每个程序集发布了一个包,那么当我尝试更新时Foo.Web,nuget会显示以下错误:
Install-Package : Unable to resolve dependency 'Foo (? 1.1.0.0)'.
使用-Pre参数不会改变这一点.A Foo.1.1.0-alpha0001.nupkg确实存在,但我觉得nuget无法解决它,因为它不是一个稳定版本,我让nuget使用以下命令自动检测解决方案中的依赖关系:
.\.nuget\NuGet.exe pack source/Foo.Web/Foo.Web.csproj -Build -Version 1.1.0.0-alpha0001 -symbols -IncludeReferencedProjects
如何正确地允许Foo.Web预发行包引用Foo相同版本的预发布包?
我在C++方面不是很有经验,当我必须使用另一个库并且我得到链接错误时,我完全不知道编译器试图告诉我什么(除了它找不到引用的东西)某处).
是否有任何良好的链接可以详细描述链接错误消息中符号和字符的含义?或者如何解决此类错误?
例如,这是我最近收到的链接错误:
testproj错误LNK2019:未解析的外部符号"public:__thiscall google :: protobuf :: internal :: GeneratedMessageReflection :: GeneratedMessageReflection(类google :: protobuf :: Descriptor const*,类google :: protobuf :: Message const*,int const*const,int,int,int,class google :: protobuf :: DescriptorPool const*,int)"(?? 0GeneratedMessageReflection @ internal @ protobuf @ google @@ QAE @ PBVDescriptor @ 23 @ PBVMessage @ 23 @ QBHHHHPBVDescriptorPool @ 23 @ H @ Z)在函数"void __cdecl testproj :: protobuf_BuildDesc_def_2eproto_AssignGlobalDescriptors(class google :: protobuf :: FileDescriptor const*)"中引用"(?protobuf_BuildDesc_def_2eproto_AssignGlobalDescriptors @ testproj @@ YAXPBVFileDescriptor @ protobuf @ google @@@ Z)
我即将开始阅读大量的二进制文件,每个文件有1000个或更多记录.不断添加新文件,因此我正在编写Windows服务来监视目录并处理收到的新文件.这些文件是用c ++程序创建的.我在c#中重新创建了结构定义并且可以很好地读取数据,但是我担心我这样做会最终导致我的应用程序死机.
using (BinaryReader br = new BinaryReader(File.Open("myfile.bin", FileMode.Open)))
{
long pos = 0L;
long length = br.BaseStream.Length;
CPP_STRUCT_DEF record;
byte[] buffer = new byte[Marshal.SizeOf(typeof(CPP_STRUCT_DEF))];
GCHandle pin;
while (pos < length)
{
buffer = br.ReadBytes(buffer.Length);
pin = GCHandle.Alloc(buffer, GCHandleType.Pinned);
record = (CPP_STRUCT_DEF)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(CPP_STRUCT_DEF));
pin.Free();
pos += buffer.Length;
/* Do stuff with my record */
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我不需要使用GCHandle,因为我实际上并没有与C++应用程序通信,所有内容都是通过托管代码完成的,但我不知道另一种方法.
由于AppDomain.AppendPrivatePath()已经过时,我正在尝试弄清楚如何为我项目中的当前AppDomain指定PrivateBinPath,而无需启动全新的AppDomain,并且以后能够访问它.
我知道我可以在AppDomainSetup对象上设置PrivateBinPath(如果我想创建一个新的AppDomain就可以了),我也知道我可以将它添加到我的app.config中,如下所示:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath=".\AlternateLookupPath" />
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
但是,将此条目添加到我的app.config时,AppDomain.CurrentDomain.SetupInformation.PrivateBinPath属性为null.
我有活动和照片,然后评论两者.现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论.架构与此类似:
CREATE TABLE EventComments
(
CommentId int,
EventId int,
Comment NVarChar(250),
DateSubmitted datetime
)
CREATE TABLE PhotoComments
(
CommentId int,
PhotoId int,
Comment NVarChar(250),
DateSubmitted datetime
)
Run Code Online (Sandbox Code Playgroud)
我的问题是我是否应该将它们组合起来,并添加一个单独的交叉引用表,但我想不出有办法正确地做到这一点.我觉得这应该没事,你有什么想法?
编辑
根据沃尔特的回答(以及一些轻读),我想出了这个:
CREATE TABLE Comments
(
CommentId int,
Comment NVarChar(250),
DateSubmitted datetime
CONTRAINT [PK_Comments] PRIMARY KEY
(
CommentId
)
)
CREATE TABLE EventComments
(
CommentId int,
EventId int
)
CREAT TABLE PhotoComments
(
CommentId int,
PhotoId int
)
ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
ALTER TABLE PhotoComments …Run Code Online (Sandbox Code Playgroud) 可能重复:
SQL:=*是什么意思?
我正在浏览一些遗留代码并找到这样的查询:
SELECT * from foo_table, bar_Table where foo_table.id *= bar_table.fac_id
Run Code Online (Sandbox Code Playgroud)
*=运算符有什么作用?
c# ×5
c++ ×2
sql-server ×2
appdomain ×1
casting ×1
diff ×1
linker ×1
marshalling ×1
nuget ×1
performance ×1
pinvoke ×1
t-sql ×1
text-files ×1
updates ×1
versioning ×1
windows ×1