我们希望让我们的构建服务器将每个构建的输出发送到
C:\Projects\{project name}\build\{build configuration}\.
为此,我将项目的Build Output路径属性设置为Visual Studio 2010中的属性,并在本地构建以确保一切正常.例如,当我这样做时,visual studio将路径更改为相对路径..\..\build\Debug.
由于项目目录在构建服务器上是不一样的(我们使用TeamCity,因此项目URL有类似C:\ BuildAgent\work\9358A92GF92),输出不会在我们想要的地方结束.
如何使Visual Studio 不将构建输出路径更改为相对路径?
如果我在C#中声明一个接口,有没有什么办法可以显式地声明实现该接口的任何类型都是引用类型?
我想这样做的原因是,无论我在哪里使用接口作为类型参数,我都不必指定实现类型也必须是引用类型.
我想要完成的例子:
public interface IInterface
{
void A();
int B { get; }
}
public class UsingType<T> where T : IInterface
{
public void DoSomething(T input)
{
SomeClass.AnotherRoutine(input);
}
}
public class SomeClass
{
public static void AnotherRoutine<T>(T input)
where T : class
{
// Do whatever...
}
}
Run Code Online (Sandbox Code Playgroud)
由于参数SomeClass.AnotherRoutine()需要是一个引用类型,我将在这里得到一个编译器错误,我调用该方法,建议我强制T成为引用类型(where T : IInterface, class在声明中UsingType).有没有办法可以在接口级别强制执行此操作?
public interface IInterface : class
Run Code Online (Sandbox Code Playgroud)
不起作用(显然)但也许有另一种方法来完成同样的事情?
我有一个gradle构建脚本,其中包含一些源集,这些源集都定义了各种依赖项(一些常见,一些没有),我正在尝试使用Eclipse插件让Gradle 为Eclipse 生成.project和.classpath文件,但我不能弄清楚如何获取所有依赖项.classpath; 由于某种原因,实际上添加了很少的外部依赖项.classpath,因此Eclipse构建失败并出现1400错误(使用gradle构建工作正常).
我已经定义了我的源集:
sourceSets {
setOne
setTwo {
compileClasspath += setOne.runtimeClasspath
}
test {
compileClasspath += setOne.runtimeClasspath
compileClasspath += setTwo.runtimeClasspath
}
}
dependencies {
setOne 'external:dependency:1.0'
setTwo 'other:dependency:2.0'
}
Run Code Online (Sandbox Code Playgroud)
由于我没有使用main源集,我认为这可能与它有关,所以我补充说
sourceSets.each { ss ->
sourceSets.main {
compileClasspath += ss.runtimeClasspath
}
}
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.
我无法弄清楚所包含的库的任何常见属性,或者那些没有的库的常见属性,但我找不到任何我确定的东西(虽然当然必须有一些东西).我有一种感觉,所有包含的库都是test源集的依赖关系,无论是直接还是间接,但我还没有能够验证是否存在所有test的依赖关系.
如何确保放入所有源集的依赖项.classpath?
我在ASP.NET Web API项目中的控制器上有以下操作方法:
[Route("api/v2/project/{projectId}/stuff"), HttpGet]
public IHttpActionResult Get(int projectId)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpGet]
public IHttpActionResult Get(int projectId, [FromUri] Guid id)
[Route("api/v2/project/{projectId}/stuff"), HttpPost]
public IHttpActionResult Post(int projectId, [Required] Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpPut]
public IHttpActionResult Put(int projectId, [FromUri] Guid blastId, Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpDelete]
public IHttpActionResult Delete(int projectId, [FromUri] Guid id)
Run Code Online (Sandbox Code Playgroud)
由于javascript错误,我提出了DELETE请求
api/v2/project/1234/stuff/undefined
Run Code Online (Sandbox Code Playgroud)
即,而不是一个GUIDid,我得到了字符串"undefined".据我所知,这不应该与我的任何路线相匹配,但是我得到了一个响应而不是404 Not found(甚至405 Method not allowed)200 OK.
我在每个动作方法中设置了一个断点,并使用Fiddler重复请求,但没有一个断点被击中.我也尝试从nuget安装WebApiRouteDebugger软件包,但我们正在使用一个自定义控制器工厂,它通过我的DI容器挂钩,所以我根本无法使用它.我甚至尝试从我的全球注册过滤器中抛出以下异常:
throw new Exception(actionContext.ControllerContext.ControllerDescriptor.ControllerName +
" " + actionContext.ActionDescriptor.ActionName);
Run Code Online (Sandbox Code Playgroud)
但DELETE请求 …
我想尝试这样的工作:
public class FooService : IFooService {
public FooService(Func<IBarService> barFactory) { ... }
}
public class BarService : IBarService, IDisposable { ... }
services.AddSingleton<IFooService, FooService>();
services.AddTransient<IBarService, BarService>();
services.AddSingleton<Func<IBarService>>(ctx => () => ctx.GetService<IBarService());
Run Code Online (Sandbox Code Playgroud)
这可以解决BarService实例,但我无法弄清楚如何正确管理它的生命周期.当我在其中一个成员中执行此操作时FooService:
using (var bar = _barFactory())
{
...
}
Run Code Online (Sandbox Code Playgroud)
我得到一个ObjectDispoedException:
System.ObjectDisposedException:无法访问已处置的对象.此错误的常见原因是处理从依赖项注入解析的上下文,然后尝试在应用程序的其他位置使用相同的上下文实例.如果您在上下文中调用Dispose()或将上下文包装在using语句中,则可能会发生这种情况.如果使用依赖项注入,则应该让依赖项注入容器负责处理上下文实例.
但是,如果我这样做var bar = _barFactory();,没有使用using语句,我就无法向DI容器发出信号,表示我已经完成了实例,并且可以将其处理掉.
这里的正确方法是什么?
(旁注:是的,我知道有些人会反对单件服务不应该依赖于瞬态服务.这不是这里发生的事情;单件服务依赖于单件工厂,它产生瞬态实例.然后单例使用一个或两个语句的瞬态服务然后用它完成,所以这里不应该有实际的生命周期问题.)
我已经安装了Visual Studio 2010的Beta 1,并开始工作了一点.即使我在Visual Studio 2008中没有长时间使用CodeRush Xpress,我立即开始缺少一些简洁的功能.
有没有办法在Visual Studio 2010上安装CodeRush Xpress,即使它只是Beta呢?
我在本地Git存储库中合并了两个分支,但存在一堆冲突.认为TortoiseGit上下文菜单中的"Resolve"将带我进入冲突解决GUI,我点击它 - 只是为了意识到我只是将所有冲突标记为已解决,而没有对它们做任何事情.因此,我有一堆未标记的文件:
master<<<<<<<<<
some change
=======
some other change
>>>>>>>>>>branch
Run Code Online (Sandbox Code Playgroud)
构造在其中,Git不知道它们仍然是一个问题.
如何将此冲突标记撤消为已解决,即再次将其标记为冲突?
我正在使用Android SDK和Android ADT插件在Eclipse中工作,我有一些基于手机方向的功能,我想在模拟器中测试(更具体地说,我想验证我对这个问题的解决方案).
如何模拟方向更改?
我有一个双重问题:
在给定主半径R和小半径a的情况下,如何在MATLAB中绘制环形曲面?为了避免混淆,我正在谈论的是环形/极向坐标系,如下图所示.
现在,在这个表面上的任何点(phi,theta),小半径将被我存储在矩阵中的某个值扭曲.如何绘制这个扭曲的表面?一旦我得到第1部分的答案,这可能很容易,但这是我的实际目标,因此对于第1部分无法解决这个问题的任何解决方案对我来说都是无用的.
如果有人可以告诉我如何使图像在这里显得更小,请做=)
我正在试图找出如何PATCH使用Entity Framework 6.0 顺利进行实体的部分更新(基本上是HTTP ),但是我很难看到那些似乎对我不起作用的示例数量(甚至那些对于另一个版本的EF来说并不明显的人.
我想要完成的事情:
我得到的最接近的答案是通过这个非常相似的问题的答案来描述的,并通过以下代码说明:
public async Task UpdateMyEntity(int id, int? updatedProperty, string otherProperty)
{
using (var context = new MyDbContext())
{
var entity = new MyEntity { Id = id };
context.MyEntities.Attach(entity);
if (updatedProperty != null) { entity.Property = updatedProperty.Value; }
if (!string.IsNullOrEmpty(otherProperty) { entity.OtherProperty = otherProperty; }
await context.SaveChangesAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,这适用于简单实体,但我得到实体验证错误,因为我有一些必需的属性和关系,这些属性和关系未更新,因此不会出现在附加实体中.如上所述,我只想忽略这些.
我已经调试并验证了对该行运行时的context.Entry(entity).Property(e => e.Property).IsModified更改true,以及我从未触摸过的所有属性仍然返回false进行类似检查,因此我认为EF能够处理此问题.
是否有可能在上述两个限制下解决这个问题?怎么样?
更新: …