我正在使用Git Extensions,它预先安装并设置KDiff作为解决合并冲突的diff工具.我非常喜欢Winmerge,并希望用Winmerge取代KDiff.
在Git Extensions设置中,有一些设置可以更改Mergetool,但我似乎无法弄清楚我应该使用什么语法以及为什么.似乎有4个变量:$ BASE,$ LOCAL,$ REMOTE,$ MERGED.看来我应该将这些传递给WinMergeU.exe,但是哪个命令行参数?
我曾尝试过几次搜索,但实际上似乎没有答案.
我发现在某些情况下我可以在调试时编辑源代码,使用Visual Studio内置的Web服务器而不是IIS中的虚拟目录有什么其他优点吗?
我在我的开发环境中使用Windows XP,以及IIS 5的本地实例.我在几个项目上工作,因此我使用多个虚拟目录来管理所有不同的站点.
有什么缺点吗?
我有一个web.config文件,我需要插入该<configSections />
元素或操作该节点的子节点(如果它已经存在).
如果它已经存在,我不想再插入它(显然,因为它只允许存在一次).
通常,这不会是一个问题,但是:
如果此元素位于配置文件中,则它必须是元素的第一个子元素.
所以,如果我使用xdt:Transform="InsertIfMissing"
的<configSections />
元素将始终任何现有的子元素后插入(及总有一些),违反不必是第一个子元素的它上面的限制<configuration />
我试图通过以下方式完成这项工作:
<configSections
xdt:Transform="InsertBefore(/configuration/*[1])"
xdt:Locator="Condition(not(.))" />
Run Code Online (Sandbox Code Playgroud)
如果<configSections />
元素尚不存在,哪个工作完美.但是,我指定的条件似乎被忽略了.
事实上,我尝试了一些条件,如:
Condition(not(/configuration[configSections]))
Condition(/configuration[configSections] = false())
Condition(not(/configuration/configSections))
Condition(/configuration/configSections = false())
Run Code Online (Sandbox Code Playgroud)
最后,出于绝望,我试过:
Condition(true() = false())
Run Code Online (Sandbox Code Playgroud)
它仍然插入了<configSections />
元素.
重要的是要注意我正在尝试将其包含在NuGet包中,因此我将无法使用自定义转换(如AppHarbor使用的那个).
有没有其他聪明的方法可以将我的元素放在正确的位置,只有它尚不存在?
要测试它,请使用AppHarbors配置转换测试器.用以下内容替换Web.config:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="initialSection" />
</configSections>
</configuration>
Run Code Online (Sandbox Code Playgroud)
和Web.Debug.config具有以下内容:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<configSections
xdt:Transform="InsertBefore(/configuration/*[1])"
xdt:Locator="Condition(true() = false())" />
<configSections>
<section name="mySection" xdt:Transform="Insert" />
</configSections>
</configuration>
Run Code Online (Sandbox Code Playgroud)
结果将显示两个<configSections /> …
由于我无法访问我正在使用的库的完整源代码,但我确实有pdb文件,是否可以在"调试源代码"中设置断点?
如果是这样,我该怎么做?
我想从我的应用程序创建Code39编码的条形码.
我知道我可以使用字体,但我不想这样做,因为我必须在服务器上注册字体,而且我有一些非常不好的经历.
在提出这个问题之后我提出的一个例子就是答案
我试图转换我所拥有的项目中的所有web.config文件,这是我的树结构:
还有更多的web.config文件,但我们的想法是,它会找到所有这些文件并对它们应用相同的配置转换.
我从我发现的博客文章中得到了一些提示,但是我在最后一步,即实际的转变中陷入困境.中间还有一些我不喜欢的粗略部分(我不太明白我在做什么,我显然做错了).这是我到目前为止的地方:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml" AssemblyFile="Tools\Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<SitePath>..\..\Website</SitePath>
<WebConfigTransformInputFile>$(SitePath)\Web.config</WebConfigTransformInputFile>
<WebConfigTransformFile>Web.Transform.config</WebConfigTransformFile>
<OutDir>..\N\N\</OutDir>
</PropertyGroup>
<ItemGroup>
<_FilesToTransform Include="$(SitePath)\**\web.config"/>
</ItemGroup>
<Target Name="Transform">
<MakeDir Directories="@(_FilesToTransform->'$(OutDir)%(RelativeDir)')" />
<TransformXml Source="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Transform="$(WebConfigTransformFile)"
Destination="@(_FilesToTransform->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我的Transform.bat看起来像这样:
%systemroot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %CD%\Transforms\ConfigTransform.proj
Run Code Online (Sandbox Code Playgroud)
因此,当我调用批处理时,会创建相应的目录.然而,正如你所看到的,我必须对OutDir有点创意,使它成为..\N\N.出于某种原因,如果我不这样做,OutDir路径将与输入目录完全相同.所以我显然需要在MakeDir中改变一些东西,但我不确定是什么.
真正的问题出现在它开始进行变换时.我试图保持TransformXml Source参数像这样或类似:
@(_FilesToTransformNotAppConfig->'%(FullPath)')
Run Code Online (Sandbox Code Playgroud)
后者给我一个错误"无法打开源文件:不支持给定路径的格式." 而前者给了我这个输出:
Build started 30-4-2012 14:02:48.
Project "D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj" on node 1 (default targets).
Transform:
Creating directory "..\N\N\..\..\Website\Views\".
Transforming Source File: ..\N\N\..\..\Website\Views\Web.config;..\N\N\..\..\Website\Web.config
D:\Dev\transform\DoTransforms\Transforms\ConfigTransform.proj(32,2): error : Could not open Source file: Could not …
Run Code Online (Sandbox Code Playgroud) 我有一个自定义DataAnnotationsModelValidatorProvider,用于以更动态的方式进行模型验证,然后只添加属性.我试图将我的提供添加到global.asax.cs,如下所示:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new AttributeValidatorProvider());
Run Code Online (Sandbox Code Playgroud)
但是一旦我加载了表单,我就会收到一条错误消息:"不显眼的客户端验证规则中的验证类型名称必须是唯一的.以下验证类型不止一次出现:必需".
根据这篇博客的评论,这是因为Ninject重写了自定义验证器提供商.
我是MVC的新手,我似乎无法找到告诉Ninject接受我的自定义提供商的方法,我将如何解决这个问题?
为了记录:我不想使用Fluentvalidation.net,我想坚持使用默认的MVC验证(大多数情况下).
我编写了一个扩展方法来向(EF)EntityCollection添加项目.我收到一个有趣的错误,说我的IEnumerable("items")集合在foreach的第一个循环之后被修改了.当我将项目转换为items.ToList()(如下面的代码中),它工作正常.
我完全理解,执行ToList()将生成foreach将在其上运行的项目的副本.
我不明白的是当我对它进行预测时修改IEnumerable的是什么.
更新:不知何故,似乎items变量与collections变量相同?
更新2:我认为收集和实体可能会受到EF实体跟踪的影响,但我仍然无法理解原因
用法:
ssp.ServiceAreas.ReplaceCollection(model.ServiceAreas);
这是我的扩展方法:
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, IEnumerable<TEntity> items)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
foreach (var item in items.ToList())
collection.AddOrUpdate(item);
}
public static void AddOrUpdate<TEntity>(this EntityCollection<TEntity> collection, TEntity item)
where TEntity : EntityObject, IProjectIdentity<int>, new()
{
if (item.ID > 0 && collection.Any(c => c.ID == item.ID))
collection.Remove(collection.First(c => c.ID == item.ID));
// For now, the Remove NEVER gets hit
collection.Add(item);
}
Run Code Online (Sandbox Code Playgroud) 我正在努力研究如何改进我编写的一些代码,这些代码使用一些规则来计算汽车保险的几个不同的价格.这是困扰我的作品:
public Insurance GetInsurance(CarData carData)
{
var insurance = new Insurance();
insurance.priceGeneral = this.CalculatePrice(new Car { BrandDealer = false, MonthPayment = false, CarData = carData });
insurance.priceGeneralMonth = this.CalculatePrice(new Car { BrandDealer = false, MonthPayment = true, CarData = carData });
insurance.priceBrandDealer = this.CalculatePrice(new Car { BrandDealer = true, MonthPayment = false, CarData = carData });
insurance.priceBrandDealerMonth = this.CalculatePrice(new Car { BrandDealer = true, MonthPayment = true, CarData = carData });
return insurance;
}
Run Code Online (Sandbox Code Playgroud)
请注意,计算每月支付超过正常价格(年度支付)存在显着差异,并且依赖于BrandDealer是真还是假,还有不同的计算方法.我试图消除这个变量,但客户要求这些规则.
我知道有些属性不是"Car"的实际属性,但我很快就会重构.
我被4次这样的计算所困扰,将来会有更多的规则.即将推出的新规则将添加另一个布尔值和另外两个计算.
是否有一些不错的设计模式,我在这里没有发现我应该使用的?
我需要在更新后运行一个钩子(这将构建他们已经更新的解决方案)并且我不想为每个克隆我的中央存储库的人手动添加该钩子.
当有人第一次克隆我的中央存储库时,是否可以在该克隆中包含挂钩?似乎.hgrc文件不会自动克隆.
我确实阅读过有关站点范围内的钩子,但据我所知,它们可以在每个创建的存储库上工作,我只想在某些存储库中使用钩子.
.net ×2
asp.net ×2
c# ×2
barcode ×1
breakpoints ×1
cassini ×1
debugging ×1
git ×1
hgrc ×1
ienumerable ×1
iis ×1
mercurial ×1
msbuild ×1
msbuild-task ×1
ninject ×1
pdb-files ×1
settings ×1
slowcheetah ×1
symbols ×1
vb.net ×1
web-config ×1
winmerge ×1