我有一个Powershell脚本(由我的NuGet包运行),它将一个post build事件添加到用户的Visual Studio项目中.
$project.Properties | where { $_.Name -eq "PostBuildEvent" } | foreach { $_.Value = "xcopy `"`$(ProjectDir)MyFolder`" `"`$(OutDir)`"" }
Run Code Online (Sandbox Code Playgroud)
不幸的是,它目前覆盖了现有的post build事件.如果尚未存在构建事件,我如何修改Powershell脚本以附加它?
我之前从未使用过Powershell,但我尝试将其添加到foreach中,但这不起作用:
$_.Value = "$_.Value`nxcopy `"`$(ProjectDir)MyFolder`" `"`$(OutDir)`""
Run Code Online (Sandbox Code Playgroud)
只是给出:
System .__ ComObject.Value xcopy"$(ProjectDir)MyFolder""$(OutDir)"
我试图理解在C#中使用块.我可以在Using语句中创建一个自定义对象,如下所示,它不实现IDisposable接口吗?
Class A
{
}
using(A a = new A())
{
}
Run Code Online (Sandbox Code Playgroud)
它给出了错误,说"错误1'ConsoleApplication1.A':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'"
如何更正此错误?我不想做A类:IDisposable
还有其他方法吗?或者强制要求我们需要在这些使用块内部使用的自定义对象中实现IDisposable Dispose方法?
编辑:我不期望MSDN和数千个网站中的定义.我只是想了解这个错误以及整改
我是C#的新手(从Web开发世界转移).
无论如何,我正在制作一个简单的背景颜色更改程序,它接受用户的输入.我有三个颜色变量(这是我进入这个:backgroundColor = new Color(redIntensity, greenIntensity, blueIntensity);)
那么在Update()方法中我有这个:
//[colorIntensity] = 0 then count up...when pressed
//Changes background color
KeyboardState keyState = new KeyboardState();
if (keyState.IsKeyDown(Keys.R))
{
redIntensity++;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用!但是,如果我改变:
if(keyState.IsKeyDown(Keys.R)) ...
Run Code Online (Sandbox Code Playgroud)
至:
if(keyState.IsKeyUp(Keys.R)) ...
Run Code Online (Sandbox Code Playgroud)
它工作正常......
那么,有什么建议吗?
编辑:我正在使用XNA Framework.
IDE:Visual Studio 2010,C#,.NET 4.0,Winforms应用程序.在我开始之前看到这个课程:
public class Car
{
private string _break;
public string Break
{
get { return _break; }
set { _break = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一堂课:
public class Runner
{
Car cObj = new Car();
string propertyName = "Break";
//cobj.Break = "diskBreak"; I can do this but I have property name in string format
cobj[propertyName] = "diskBreak"; // I have the property name in string format
// and I want to make it's Property format please suggest …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用脚本。到目前为止,我已经将 C# 用于脚本并使用CodeDomProvider. 但是,我一直在考虑使用NLuafork( 的 fork LuaInterface)切换到 Lua ,因为编写脚本要容易得多,而且我熟悉语法。
但是,我面临一个问题。目前,我有一个asynchronous方法可以返回一个Task<bool>. 它使用一个TaskCompletionSource对象并返回它的Result. 这样一来,我可以阻止脚本的执行,因为这里等到Result了的TaskCompletionSource目标已定,然后才返回此Result。
现在,有了 Lua - 它是不同的。我显然不能使用await运算符,因为它是 C# 5.0 的语法,而你不能在 Lua 中使用它。所以这就是为什么我要问是否有解决方法。我希望能够获得与我的旧代码(发布在这篇文章下方)相同的结果,而无需使用await运算符。有人告诉我,我可以用 来做到这一点Task.ContinueWith,但我不熟悉这个,而且网上的例子很乏味。如果有人可以用我的代码向我展示一个示例,那就太好了。
这是我的方法:
public async Task<bool> ReturnResult()
{
this.Response = new TaskCompletionSource<bool>();
return await this.Response.Task;
}
Run Code Online (Sandbox Code Playgroud)
这是我在脚本中使用它的方式:
var result = await ReturnResult();
Run Code Online (Sandbox Code Playgroud)
在Result该的TaskCompletionSource目标是通过我的代码另一部分设置。
基本上,如果您仍然无法理解我想要实现的目标 - 一种停止执行的方法,直到代码的另一部分设置了响应。但是,它必须是asynchronous,因为我不希望我的主线程卡住。
编辑:尝试了 JonSkeet …
C#不允许我这样做.
foreach (Point point in filledPoints)
{
point.X = 0;
}
Run Code Online (Sandbox Code Playgroud)
filledPoints是一个List<Point>
它给了我一个编译器错误:"filledPoints是一个foreach迭代变量,因此无法编辑关联的成员"(对不起,该消息是德语,我很难翻译).但这有效:
foreach (Point point in filledPoints)
{
Point point2 = point;
point2.X = point2.X / oldSize.Width * Size.Width;
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用,是否有更优雅的方式绕过它?
您好我正在尝试将大字符串保存到文件中
string _ULSWcalc = "1.35 * " + _Gd + "+ 1.5 * " + _Wd + "1.5 * " + _Qd " * 0.8";
File.WriteAllLines("C:\\aab.txt", _ULSWcalc);
Run Code Online (Sandbox Code Playgroud)
_Gd _Wd并且_Qd都是变量而且是"".它们都很明确,程序无需File.WriteAllLines线路
但如果我放置它我得到这2错误
错误2参数2:无法从'string'转换为'System.Collections.Generic.IEnumerable'
错误1'System.IO.File.WriteAllLines(string,System.Collections.Generic.IEnumerable)'的最佳重载方法匹配有一些无效的参数
c# ×6
.net ×1
asynchronous ×1
c#-4.0 ×1
iteration ×1
lua ×1
nuget ×1
powershell ×1
properties ×1
reflection ×1
task ×1
using ×1
xna ×1