只是想听听一些建议(和舒适......),这将帮助我控制一些复杂的意大利面条代码 - 这是由多个程序员(通常从不相遇)长时间开发的代码.解决方案的功能只是相互补充.
通常我倾向于看到两种程序员:
"害怕死亡的程序员" - 那些家伙不会碰任何他们不需要的东西.他们可能会使用快速而肮脏的修复程序完成维护任务,这将使下一个程序员开始寻找他们的家庭地址;-)
专业人士:
它有效
缺点:
你希望你再也不会看到这个代码..
"教师" - 那些可能会重写整个代码,同时完全翻新其逻辑.
专业人士:
嗯,有人必须做肮脏的工作......
缺点:
需要更长的时间,可能其中一个最重要的功能将从产品中神奇地消失
从程序员生活中这个黑暗的一面听到你的个人经历会很高兴.
我特别好奇听到任何理论/实践建议,这将有助于我深入了解意大利面条维护任务而不会感到如此痛苦.
我有一个具有虚拟属性的基类:
public virtual string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后我有一个派生类,只覆盖属性的getter
public override string Name
{
get { return "Fixed Name"; }
}
Run Code Online (Sandbox Code Playgroud)
问题是这只会覆盖吸气剂.如果有人调用setter,则会调用基类setter,并且调用者不会知道它无效.
所以我想我会做类似的事情:
public override string Name
{
get { return "Fixed Name"; }
set { throw new Exception(); } //which exception type?
}
Run Code Online (Sandbox Code Playgroud)
所以两个(相关问题):
编辑:为什么一个例外优先于另一个例外的一些原因是好的.我的同事和我在NotSupported和之间有同样的论点InvalidOperation.
我知道SQL 2005中有条件可见性和分页符的错误,但我想知道是否有人提出了解决方法.
我有一个具有条件可见性表达式的表,我需要在表的末尾分页.
关于尝试什么的任何其他想法?我差不多需要单独的报告,而不是条件可见性:(
编辑:@Josh:那有同样的问题.如果第二个表具有条件可见性,则它不起作用.如果它没有可见性表达式,那么我会一直得到分页符.
@ Erick:我真的希望这是答案,但不幸的是它不起作用.当可见性表达式计算为隐藏时,矩形将存在很大的差距(我可以使用),当它评估为可见时,分页符仍然不起作用.
在Visual Studio Debug属性页面(对于.NET 4项目),我希望能够在Build Events中指定宏,例如$(OutDir).但它不起作用,宏不会被替换.

它只是不受支持吗?有工作吗?
我正在尝试维护一个安装项目Visual Studio 2003(是的,这是一个遗留应用程序).我们目前遇到的问题是我们需要为HKCU计算机上的每个用户编写注册表项.它们需要存在HKCU而不是HKLM因为它们是默认的用户设置,并且它们确实会改变每个用户.我的感觉是
考虑到这一点,我仍然希望在应用程序中尽可能少地进行更改,所以我的问题是,是否可以为Visual Studio 2003安装项目中的每个用户添加注册表项?
而且,目前该项目列出了五个注册表根键(HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,和用户/机器配置单元).我对用户root密钥一无所知,也没有看过User/Machine Hive.任何人都可以告诉我他们是什么?也许他们可以解决我上面的问题.
这应该很简单,但我找不到如何做到这一点(或者可能不可能).
在MSBuild中,我有一个ItemGroup,它是一个文件列表.我想只在特定文件在该ItemGroup中时才执行任务
就像是:
<Copy Condition="@(Files) <contains> C:\MyFile.txt" .... />
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?最好不要编写自定义任务.
编辑:文件列表仅与条件有关.否则它与任务无关.
我已经阅读了很多关于这个主题的其他QA,我仍然无法找到问题的解决方案,所以我决定公开我的案例.
我有这个界面
public interface IRepository<T> where T : class, IEntity
{
IQueryable<T> Find(Expression<Func<T, bool>> predicate);
T FindIncluding(int id, params Expression<Func<T, object>>[] includeProperties);
}
Run Code Online (Sandbox Code Playgroud)
这是包含我想要设置的Mock的方法的基本结构
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find().Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)
我一直试图用这种方式设置模拟:
public PeopleController CreatePeopleController()
{
var mockUnitofWork = new Mock<IUnitOfWork>();
var mockPeopleRepository = new Mock<IRepository<Person>>();
mockPeopleRepository.Setup(r=>r.Find(It.isAny<Expression<Func<Person,bool>>>()).Single()).Returns(new Person(){});
mockUnitofWork.Setup(p => p.People).Returns(mockPeopleRepository.Object);
return new PeopleController(mockUnitofWork.Object);
}
Run Code Online (Sandbox Code Playgroud)
但系统总是抛出相同的异常"System.NotSupportedException:Expression引用一个不属于模拟对象的方法......"
另外我想补充说我正在使用MSTest和Moq
我知道使用Expression设置模拟并不容易,不推荐,但这对我来说非常重要因为"查找"是我在我的应用程序中大量使用的方法
我想知道人们最好的做法是删除未使用的代码.就个人而言,我喜欢删除(不只是评论)任何当前没有使用的东西.但我不确定要走多远.
以此为例(尽管我对一般性讨论感兴趣).在我的项目中,我有十几个UserControls.对于后来获得的功能,我在其中一个UserControl上实现了几个方法和属性.附加代码不是特定于该功能,但需要支持它.以后它可能会有用.
这同样适用于当前未使用的UserControl.我应该删除它们还是保留它们?
编辑:不言而喻(或者我认为会这样)我们正在使用源代码控制.
我正在使用我从DocumentPaginator派生的类(见下文)来打印来自WPF应用程序的简单(仅文本)报告.我已经准备好了所有内容都能正确打印,但如何在打印之前进行打印预览?我有一种感觉,我需要使用DocumentViewer,但我无法弄清楚如何.
这是我的Paginator类:
public class RowPaginator : DocumentPaginator
{
private int rows;
private Size pageSize;
private int rowsPerPage;
public RowPaginator(int rows)
{
this.rows = rows;
}
public override DocumentPage GetPage(int pageNumber)
{
int currentRow = rowsPerPage * pageNumber;
int rowsToPrint = Math.Min(rowsPerPage, rows - (rowsPerPage * pageNumber - 1));
var page = new PageElementRenderer(pageNumber + 1, PageCount, currentRow, rowsToPrint)
{
Width = PageSize.Width,
Height = PageSize.Height
};
page.Measure(PageSize);
page.Arrange(new Rect(new Point(0, 0), PageSize));
return new DocumentPage(page);
}
public override …Run Code Online (Sandbox Code Playgroud) 说我有一个像这样的简单课程
[Serializeable]
public class MyClass
{
public MyClass()
{
this.MyCollection = new List<int>();
}
public List<int> MyCollection { get; private set;}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用XmlSerializer反序列化,我会收到一条错误消息,指出MyCollection是只读的,无法分配给.但是我不想公开setter,因为如果类的用户分配了它会导致各种问题.FxCop正确地警告:收集属性应该是只读的
但是在社区页面底部添加的内容是这样的:
XmlSerializer了解只读集合对于XmlSerializer,集合属性不必是可读写的,以便正确地序列化和反序列化内容.XmlSerializer将在实现ICollection或IEnumerable的集合属性上查找名为Add的方法,并在反序列化所有者类型的实例时使用该方法填充集合.
然而,它似乎并非如此(因为我得到InvalidOperationException).我能做什么遵循保持属性设置器私有的最佳实践,同时仍允许我使用XmlSerializer?
.net ×5
c# ×3
command-line ×1
inheritance ×1
installation ×1
macros ×1
maintenance ×1
mocking ×1
moq ×1
msbuild ×1
printing ×1
properties ×1
registry ×1
tdd ×1
unit-testing ×1
windows ×1
wpf ×1