我有一个方法,它接受N,我想要创建的对象的数量,我需要返回N个对象的列表.
目前我可以用一个简单的循环来做到这一点:
private static IEnumerable<MyObj> Create(int count, string foo)
{
var myList = new List<MyObj>();
for (var i = 0; i < count; i++)
{
myList .Add(new MyObj
{
bar = foo
});
}
return myList;
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有另一种方式,也许用LINQ来创建这个列表.
我试过了:
private static IEnumerable<MyObj> CreatePaxPriceTypes(int count, string foo)
{
var myList = new List<MyObj>(count);
return myList.Select(x => x = new MyObj
{
bar = foo
});
}
Run Code Online (Sandbox Code Playgroud)
但这似乎填补了我的名单.
我尝试将选择更改为foreach但是同样的交易.
我意识到列表具有计数能力,LINQ没有找到任何要迭代的元素.
myList.ForEach(x => x = new MyObj
{
bar = foo …Run Code Online (Sandbox Code Playgroud) 我正在寻找类似Powershell脚本的东西来检查是否安装了msdeploy,如果是,那么是什么版本
我考虑过检查"c:\ Program Files\IIS"并检查那里的MSDeploy安装,但是这总是保证是安装位置吗?
我需要这个在任何给定的服务器机器上工作
我目前正在使用MSBuild通过传入参数来创建MSDeploy包:
/p:DeployOnBuild=true;DeployTarget=Package
Run Code Online (Sandbox Code Playgroud)
我正在使用一个parameters.xml文件(放在我网站的根目录下). 我发现的另一个问题是尝试设置应用程序池.
我的parameters.xml文件:
<parameters>
<parameter name="Application Pool Name" description="Application Pool for this site" tags="" defaultValue="ASP.NET v4.0">
<parameterEntry kind="DeploymentObjectAttribute"
scope="application"
match="/application/@applicationPool" />
</parameter>
...
</parameters>
Run Code Online (Sandbox Code Playgroud)
但似乎msbuild生成的msdeploy包中的archive.xml文件没有带有applicationPool元素的部分
如何使用此部分生成archive.xml以便我可以设置应用程序池?
我想要设置的应用程序池已经存在,所以我不关心MSDeploy同步或在这里创建应用程序池.
编辑:我发现了这个问题如何通过VS&MSDeploy设置控制用于部署的AppPool,提示使用wpp.targets生成自定义提供程序.我正在探索如何使用此方法来修改archive.xml文件
我正在尝试构建WIX安装程序,该安装程序允许用户通过命令行参数指定安装路径。
<Property Id="IISROOTPATH">
<RegistrySearch Id="FindInetPubFolder" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" />
</Property>
...
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="IISROOTPATH">
<Directory Id="INSTALLPATH" Name="WebsiteFolder">
...
Run Code Online (Sandbox Code Playgroud)
如果用户未传递任何参数,它将在iisroot文件夹中查找注册表,并将文件安装在名为“ WebsiteFolder”的文件夹下
但是,为了使用户能够更改安装路径,他们必须通过绝对路径,例如
INSTALLPATH="C:\InetPub\wwwroot\CustomWebsiteFolder"
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?然后是否忽略其他目录元素TARGETDIR和IISROOTPATH?
如何将INSTALLPATH更改为WEBSITEFOLDERNAME,以便仅要求用户输入文件夹名称,而不是绝对安装路径。从而迫使用户始终安装到inetpub中吗?
我有一个目前托管在Windows Azure网站上的Orchard CMS网站.
它是一个非常标准的博客,图像通过skydrive托管和链接,因此博客本身只提供HTML.
我已将其设置为共享模式,运行1个实例.
但我一直在达到配额.看起来我的网站总是最大化内存(最大为每小时512mb),我不明白为什么?
我已经尝试增加到3个实例,但它不会增加我可以使用的最大内存.
更新:
共享模式下网站的最大使用量为:
CPU时间:每天4小时,每5分钟2.5分钟
文件系统:1024mb
内存使用量:每小时512mb
数据库:1024mb(Web实例)
UPDATE2:
我尝试在不同的区域重新创建我的网站.目前我的网站托管在美国西部,具有上述限制,但其他区域的限制略有不同,例如东亚每小时内存使用限制为1024mb!我无法挖掘任何关于此的文档,这令人费解.
UPDATE3:
在Update2中,我提到不同的区域具有不同的"每小时内存使用限制".事实并非如此.我在"Free"设置下设置了一个新网站,每小时1024mb,但当我将其切换为"Shared"时,内存使用限制降至每小时512mb.
尽管是相同的源代码,但我无法在我的任何其他网站上重现此问题,这让我相信我的特定天蓝网站设置的奇怪之处.可能与@Vinblad提到的仪表板有关.
我打算在不同的地区建立一个新的天蓝色网站,当我在它的时候,升级到Orchard 1.6
如果我想初始化分组列表,我可以内联吗?
更新上下文
我已经知道我无法初始化接口,但是dotnet中是否已经内置了一个实现?
我不想创建自己的实现,因为我试图将现有的私有方法重构为它自己的公共类,因此我需要传递参数进行单元测试.
void MyMethod(IList<IGrouping<int, MyObject>> objGroupings)
Run Code Online (Sandbox Code Playgroud)
目前我已经使用初始化列表,然后按键分组:
var fooList = new List<MyObject>
{
new MyObject{ foo = 5 },
new MyObject{ foo = 5 },
new MyObject{ foo = 5 },
new MyObject{ foo = 2 },
new MyObject{ foo = 2 }
};
var fooGrouping = fooList.GroupBy(o => o.foo).ToList();
Run Code Online (Sandbox Code Playgroud) 在StackExchange.Redis文档中,建议仅创建一个并重用与Redis的连接。
Azure Redis最佳实践建议使用以下模式:
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect("cachename.redis.cache.windows.net,ssl=true,abortConnect=false,password=password");
});
public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我应该如何在要在Web /应用程序配置文件中设置配置的Autofac上使用它呢?
我目前有一个RedisCacheProvider:
private readonly ConnectionMultiplexer _connection;
public RedisCacheProvider(string config)
{
_connection = ConnectionMultiplexer.Connect(config);
}
Run Code Online (Sandbox Code Playgroud)
并在我的Autofac配置中:
builder.RegisterType<RedisCacheProvider>().As<ICacheProvider>().WithParameter("config", "localhost");
Run Code Online (Sandbox Code Playgroud)
我的想法是,我应该更改RedisCacheProvider使其接受通过静态变量传递的ConnectionMultiplexer吗?
更新:到目前为止,我的解决方案:
我的RedisCacheProvider(在这里注入接口可以让我在单元测试中模拟连接):
private readonly IConnectionMultiplexer _connection;
public RedisCacheProvider(IConnectionMultiplexer connection)
{
_connection = connection;
}
Run Code Online (Sandbox Code Playgroud)
RedisConnection类保存静态属性并从配置文件读取配置:
public class RedisConnection
{
private static readonly Lazy<ConnectionMultiplexer> LazyConnection =
new Lazy<ConnectionMultiplexer>(
() => ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisCache"]));
public static …Run Code Online (Sandbox Code Playgroud) 我有一些SignalR客户端代码,在服务器发出请求后会调用服务器方法:
var connection = new HubConnection(_hubAddress);
var hubProxy = _hubConnection.CreateHubProxy(HubName);
connection.Start().Wait(TimeSpan.FromMinutes(1));
...
hubProxy.On("Client_Method", (string callerId, string requestIdentifier) =>
{
if (connection.State == ConnectionState.Connected)
{
// error hapening on the invoke call here, despite
// the connection state being connected.
// Do I need to call Start here?
hubProxy.Invoke("Proxy_Method_Callback", callerId, requestIdentifier);
}
});
Run Code Online (Sandbox Code Playgroud)
但是它抛出一个例外:
InvalidOperationException:无法发送数据,因为连接处于断开状态。发送任何数据之前先呼叫开始。
但是,如果hubProxy已连接并打开以接收请求,为什么调用时会出错?