我有一个在Visual Studio 2015中以调试模式运行的IIS Express项目。
Web应用程序引用具有以下代码行的类库:
var certificate = new X509Certificate2(@"certkey.p12", "notasecret", X509KeyStorageFlags.Exportable);
certkey.p12文件与类库的源代码位于同一文件夹中,标记为“Build Action = Content”和“Copy if newer”。
构建时,文件会按预期复制到Web应用程序的bin文件夹中。但是当我从Web应用程序调用该方法时,它会抛出“找不到文件”。
它在单元测试中工作正常,文件被复制到/ bin / x64 / Debug /
那么IIS Express在哪里寻找文件?我怀疑它是某种临时文件夹但是为什么在我构建/调试时VS没有复制文件?
答案 0 :(得分:0)
在IIS Express下运行时,它正在寻找的是“C:\ Programs Files \ IIS Express \ certkey.p12”。
我使用了一点点偷看来找到文件实际复制到的文件夹并提出了这个:
string binPath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
Uri uri = new Uri(binPath);
string localPath = uri.LocalPath;
string dir = System.IO.Path.GetDirectoryName(localPath);
// now "dir" is the full local path of the bin folder
首次执行时(~100ms)有点慢,但后续请求更快。
如果将其部署到生产环境时出现任何问题,我会更新。