我有一个产品,包含可以安装到不同位置的多个功能,例如,功能1是安装在程序文件中的可执行文件,功能2是安装在wwwroot中的网站.但是,功能1和功能2都依赖于许多相同的dll,因此需要将包含这些dll的组件安装在2个不同的位置,具体取决于安装的功能.
有没有办法在不定义每个组件两次的情况下实现这一目标?
为了提供我想要实现的更完整的示例,可以使用以下代码编译以下完整的wxs文件:
> candle.exe Foobar.wxs
> light.exe -ext WixUIExtension Foobar.wixobj
> msiexec/i Foobar.msi
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='Foobar 1.0'
Id='E578DF12-DDE7-4BC2-82CD-FF11862862D5'
UpgradeCode='90F09DD5-E01B-4652-8971-515997730195'
Language='1033'
Codepage='1252'
Version='1.0.0'
Manufacturer='Acme Ltd.'>
<Package Id='*'
Keywords='Installer'
Description="Acme 1.0 Installer"
InstallerVersion='100'
Languages='1033'
Compressed='yes'
SummaryCodepage='1252' />
<Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="Acme 1.0 Installation" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<!-- Directory 1 (Program Files) -->
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="PROGRAM_INSTALLDIR" Name="Acme" />
</Directory>
<!-- Directory 2 (wwwroot) -->
<Directory Id="Inetpub" Name="Inetpub">
<Directory Id="wwwroot" …Run Code Online (Sandbox Code Playgroud) 我有一个简单的Web API,它返回一个Iobservable.我正在使用HttpClient来获取Observable,以便我可以订阅它.我的问题是订阅时返回的Iobservable发出一个'空'结果.
服务器
public IObservable<DataItem> GetDataItems()
{
return Observable.Generate(0, i => i < 10, i => i + 1,
i => new DataItem
{
Id = i,
Name = String.Format("Storage{0}",i)
});
}
Run Code Online (Sandbox Code Playgroud)
客户
public IObservable<DataItem> GetDataItems()
{
using (HttpClient apiClient = new HttpClient())
{
apiClient.BaseAddress = new Uri("http://localhost:9001");
apiClient.DefaultRequestHeaders.Add("x-user-authentication", "xxxxxx");
return apiClient
.GetAsync("api/xxxx/yyyy").Result.Content
.ReadAsAsync<DataItem>().ToObservable();
}
}
var source = GetDataItems();
List<DataItem> items = new List<DataItem>();
IDisposable consoleSubscription = source.Subscribe(
x => Console.WriteLine("{0}:{1}", x.Id, x.Name),
ex => Console.WriteLine("OnError : {0} ", …Run Code Online (Sandbox Code Playgroud) Web API使用Json.Net格式化程序来序列化其JSON响应,这允许您在启动时使用以下内容非常轻松地为整个应用程序自定义生成的JSON的格式:
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
Run Code Online (Sandbox Code Playgroud)
这允许您解决C#语法之间的问题,首选PascalCase和基于javascript的客户端更喜欢camelCase.然而,在不考虑客户端请求实际来自哪个人的情况下在API上全局设置它似乎假设API将只有一种类型的客户端,并且您为API设置的任何内容都是必须的.
我的API有多种客户端类型(javascript,iOS,Android,C#),我正在寻找一种方法来为每个请求设置Json.Net SerializerSettings ,以便客户端可以通过某种方式请求他们的首选格式(可能是自定义头或queryString param)来覆盖默认值.
在Web API中设置每个请求Json.Net SerializerSettings的最佳方法是什么?