我有一个azure函数(v3):
[FunctionName("Function1")]
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ExecutionContext context)
{
if (File.Exists(Path.Combine(context.FunctionAppDirectory, "bin", "MyFolder", "TextFile1.txt")))
return new OkObjectResult("File does exists!");
else
return new OkObjectResult("File does NOT exists!");
}
在我的。csproj里面有:
<None Update="MyFolderTextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<ItemGroup>
<MySourceFiles Include="$(OutDir)MyFolderTextFile1.txt" />
</ItemGroup>
<Copy SourceFiles="@(MySourceFiles)" DestinationFolder="$(OutDir)binMyFolder" SkipUnchangedFiles="true" />
</Target>
我想把..MyFolder/TextFile1.txt
复制到..bin/MyFolder/TextFile1.txt
在本地运行它可以正常工作File does exists!
但是将它发布到Azure,我得到一个File does NOT exists!
看.scm.azurewebsites.net/DebugConsole
,我可以看到文件夹不太像我希望的那样
C:homesitewwwrootMyFolder>
C:homesitewwwrootbin>
我确实尝试添加<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
,但没有帮助。
我如何使这个例子工作?
(编辑)为什么我要这样做:我有一个第三方DLL,它期望一个文件夹结构位于与DLL所在的文件夹中。这在。net项目中通常是向前扩展的。使用Azure函数,此文件夹结构现在不会与DLL放在同一个文件夹中。
你必须把文件命名为Copy Always
:
<None Update="MyFolderTextFile1.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
在VS中,点击文件>Properties
祝辞更改Copy to Output Directory
>Copy Always
.
在这种情况下,您将不得不使用管道Copy file
任务从wwwroot
文件夹复制文件到wwwroot/bin
。