我正在开发一些分布式团队的类库.我们使用Subversion进行源代码控制.其中一个开发人员想要将他的bin和obj目录提交到存储库,这对我来说从来就不是标准做法.什么是最佳做法?优缺点都有什么?
我已经编写了一些Wix安装程序,但我注意到我的产品在安装和查看控制面板,添加/删除程序时,与其他一些安装相比,对元数据有点了解.许多已安装的产品包含以下项目:
选择安装的产品后,这些项目将显示在控制面板的底部.我的产品与Wix一起安装,没有这些项目,只有版本号.我无法看到Wix中我可以添加这些项目的任何地方,搜索Wix帮助文件不会产生任何这些项目的匹配.
有谁知道这在Wix中是否可行?我相信一定是......
我有一个我正在定制的Web应用程序(实际上是Orchard CMS),我想使用Web Publishing aka MSDeploy将directl从我的构建服务器推送到我的托管服务提供商.
问题是,当我发布站点(从Visual Studio,尚未从构建服务器尝试它)时,它删除了目标网站的写入权限,这使得Orchard立即失效,因为它无法再访问其数据库(等等).
我们可以辩论这个的智慧,但最重要的是,Orchard需要写访问权限,而网络发布则坚持要删除访问权限,这会破坏网站.不好.我必须登录服务提供商的控制面板并在每次发布时重置权限,这使得流程不是自动的.
那么,我如何让Web Publishing单独保留ACL?我无法在任何地方找到解决方案的任何设置.
谢谢, - 蒂姆
我有一些使用的代码Task<T>推迟从串行读取操作返回结果很短的时间,如下所示:
void ReturnResponseAfterAShortDelay()
{
if (delayedResponseCancellationTokenSource != null)
delayedResponseCancellationTokenSource.Cancel(); // Cancel any pending operations and start a new one.
delayedResponseCancellationTokenSource = new CancellationTokenSource();
log.InfoFormat("Deferring response for {0} ms", Settings.Default.TimeoutMs);
Task.Delay(Properties.Settings.Default.TimeoutMs, delayedResponseCancellationTokenSource.Token)
.ContinueWith((continuation) => ReturnWhateverHasArrived(), TaskContinuationOptions.NotOnCanceled)
.Start();
}
Run Code Online (Sandbox Code Playgroud)
此代码背后的想法是在没有新字符到达指定间隔时返回结果.
但是,由于我无法控制的因素,我必须使用.NET 3.5,这会阻止我使用Task<T>,因此我必须以某种方式重构此代码.
如何在不使用的情况下实现相同的结果Task<T>?
虽然我展示的具体代码恰好是一个定时延迟,但我的用法并不仅限于延迟.可能还有其他情况我想立即开始一些"长时间运行"的轮询任务.典型的情况是I/O绑定操作,例如,定期查询连接到串行端口的设备,然后在满足某些条件时引发事件.
我的大脑变成了果冻,或者我有一种不经意的经历,或者某种东西.我正在修改一个看起来有点像这样的类层次结构:

我的Money班级看起来像这样:
public abstract class Money
{
public int Amount { get; set; }
public static bool operator ==(Money leftSide, Money rightSide)
{
// Money can only be equal if it is in the same currency.
if (leftSide.GetType() != rightSide.GetType()) return false;
return leftSide.Amount == rightSide.Amount;
}
public static bool operator !=(Money leftSide, Money rightSide)
{
// If the currencies are different, the amounts are always considered unequal.
if (leftSide.GetType() != rightSide.GetType()) return true;
return leftSide.Amount …Run Code Online (Sandbox Code Playgroud) 我需要一种方法来跟踪各种类的实例,而不需要那些知道它们被跟踪的类.基本上,我有一个类工厂,它创建实例并将它们交给另一个线程.一旦该线程完成并卸载实例,我需要得到通知,这样我就可以引用计数并在所有实例都消失后退出我的类工厂.
挑战在于我无法修改我将加载的任何类,因为我无法控制它们的源代码.
跟踪我创建的实例很简单,我可以在创建它们时将它们放在某种集合中.跟踪他们的破坏导致我的问题.如果我可以修改源代码,我会向每个类添加一个事件,当我创建一个实例时,我会挂钩事件并将其用作我的通知.但我不能这样做.
所以,问题是:是否有一种偷偷摸摸的方式来监视对象实例并检测它何时被销毁?
我在让我的CI构建在TeamCity下工作时遇到了问题.我有类似的项目可以建立好,所以我不认为这本身就是TeamCity的问题,但我已经看了很多,我开始变得盲目,我担心我可能会错过明显的.我会欣赏另一种观点.
我正在开发的项目(ASCOM驱动程序)有一个Wix安装项目和一个托管自定义操作.自定义操作有一个使用MSpec的单元测试项目.这一切都在我的工作站上构建良好,测试运行并通过,一切都很好.在TeamCity上,解决方案甚至不会编译.我欢迎TeamCity可能突出了我的构建中的弱点,但我无法理解这里发生了什么.
什么似乎要发生的事情是在构建时构建的,这意味着在删除项目输出(在维克斯自定义操作)的一个后续项目引用它未能建立.以下是日志输出中的一些编辑精选:
安装项目开始构建......
715 [01:21:20]: [MSBuild] Product Setup\Product Setup.wixproj: Build target: Rebuild (11s) 716 [01:21:20]: [Product Setup\Product Setup.wixproj] CoreClean 717 [01:21:20]: [CoreClean] Delete [...]
然后它解决了需要构建自定义操作项目的引用和注意事项...
729 [01:21:20]: [Product Setup\Product Setup.wixproj] ResolveProjectReferences (2s) 730 [01:21:21]: [ResolveProjectReferences] MSBuild (2s) 731 [01:21:21]: [MSBuild] Wix.RegisterAscomDeviceProfiles\Wix.RegisterAscomDeviceProfiles.csproj: Build default targets (2s) 732 [01:21:21]: [Wix.RegisterAscomDeviceProfiles\Wix.RegisterAscomDeviceProfiles.csproj] CheckPrerequisites 733 [01:21:21]: [Wix.RegisterAscomDeviceProfiles\Wix.RegisterAscomDeviceProfiles.csproj] RestorePackages
然后构建自定义操作项目并打包CA程序集并将输出复制到输出目录...
739 [01:21:21]: [CoreCompile] Csc 740 [01:21:21]: [Csc] C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:AnyCPU /errorreport:prompt /define:DEBUG;TRACE /highentropyva- /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.Astrometry.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.Attributes.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.Controls.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.DeviceInterfaces.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.DriverAccess.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.Exceptions.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.SettingsProvider.dll /reference:C:\BuildAgent\work\bf752c89b3da5535\packages\ASCOM.Platform.6.0.2.1\lib\net35\ASCOM.Utilities.dll …
我有许多针对.NET Micro Framework 4.3.2的项目.我在Visual Studio 2013中开发了它们.我刚刚升级到Visual Studio 2015,现在我遇到了用于编译和运行的相同代码的奇怪问题.
具体来说,我已经开始收到此错误:
CS1579 foreach语句不能对'string'类型的变量进行操作,因为'string'不包含'GetEnumerator'的公共定义
而且公平地说,它似乎没有.但是当我开发代码时,这很有效.它被编译,推送到NuGet并在其他几个项目中工作,因此它必须有效.
那么,为什么这停止在Visual Studio 2015中工作?我有很多项目使用这个成语迭代字符串中的字符,我希望我不必更改它们... :(
我注意到,如果我创建一个公开ArrayList的.NET组件,那么该ArrayList将通过COM Interop并以脚本语言(如VBScript)提供.
泛型,如IList<T>似乎没有工作.
为什么这样,是否有任何方法可以使通用类型成功地通过COM Interop流向脚本引擎?
我一直在使用MSpec,我真的很喜欢它.我发现要让ReSharper识别我的规格,我需要使用SubjectAttribute.
我想知道,在[Subject()]属性中放入什么是最好的东西?
如果我正在做BDD,那么我不知道被测试的类型所以[Subject(typeof(thingy))]似乎为时过早.可以在以后添加,我想一旦编写代码.
所以留下文本版本,[Subject("some text")].但放在那里最好的是什么?
无论我做什么,它似乎都不会影响我在ReSharper中获得的输出.我想在某种程度上这取决于个人偏好,但我想知道这里是否有任何约定?