我有一个具有MVC项目和Windows控制台应用程序的解决方案。两个项目共享相同的Backend-Project,用于加载和保存数据。
我需要交换这两个项目的数据。因此我决定使用隔离范围:
private string LoadInstallationFile()
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForDomain();
if (!isoStore.FileExists(ClientSettingsFile)) return null;
/* do stuff */
}
private void SaveInstallationFile() {
IsolatedStorageFile isoStore = IsolatedStorageFile.GetMachineStoreForDomain();
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(ClientSettingsFile, FileMode.CreateNew, isoStore))
{
using (StreamWriter writer = new StreamWriter(isoStream))
{
writer.WriteLine(data);
}
}
}
现在在mvc项目中我使用“SaveInstallationFile()”保存数据。我可以从那个mvc-project中访问该文件。
但是当我尝试使用另一个(控制台)项目访问数据时,文件不存在。
如何在这两者之间交换数据? (两者都很有可能在不同的用户凭据下运行,因此GetUserStore ...()恕我直言不起作用。
MVC-Application和Console-Application都在同一台服务器上运行。
答案 0 :(得分:1)
如果您确实需要使用独立存储API,则可以使用GetMachineStoreForAssembly
(如果此代码在两个项目的同一程序集中共享)。目前,您为不同的应用程序使用不同的存储。但说实话,我更喜欢使用数据库或自定义可配置的共享磁盘路径,因为它看起来更灵活。
GetMachineStoreForAssembly
是GetMachineStoreForDomain
的限制较少的版本(两者都要求代码在同一个程序集中,但GetMachineStoreForDomain
要求它也在同一个应用程序中)。您可以查看MSDN文档:
GetMachineStoreForAssembly
)相当于GetStore(IsolatedStorageScope.Assembly |
IsolatedStorageScope.Machine, null, null)
GetStore(IsolatedStorageScope.Assembly |
IsolatedStorageScope.Domain | IsolatedStorageScope.Machine,
null, null);
(因此,它包含一个额外的标志,这就是为什么它更具限制性)并且他们两个都检查调用程序集。不是root执行程序集。